PL/SQL é uma linguagem para escrever programas autônomos. Ele não foi projetado para interatividade do usuário. Os valores de entrada são passados como parâmetros. Portanto, seu programa deve ficar assim
CREATE OR REPLACE PROCEDURE hello
( p1 in number
, p2 in varchar2 )
AS
l_salutation varchar2(20) := 'Hello World';
BEGIN
DBMS_OUTPUT.PUT_LINE(l_salutation);
DBMS_OUTPUT.PUT_LINE('p1 = ' || p1);
DBMS_OUTPUT.PUT_LINE('p2 = ' || p2);
END;
/
Observe que não há necessidade de DECLARE com um procedimento nomeado. A seção entre AS e BEGIN é para declarar variáveis, como fiz com
l_salutation
. Você pode fornecer valores para esses parâmetros ao chamar o programa. No SQL*Plus funcionaria assim:
SET SERVEROUTPUT ON
accept p1 prompt "please enter 1 or 0: "
accept p2 prompt "please enter Y or N: "
exec HELLO (&p1, '&p2')