Resposta revisada
Se você não estiver chamando esse código de outro programa, uma opção é pular o PL/SQL e fazê-lo estritamente em SQL usando variáveis de ligação:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
Em muitas ferramentas (como Toad e SQL Developer), omitir o
var
e exec
instruções farão com que o programa solicite o valor. Resposta original
Uma grande diferença entre T-SQL e PL/SQL é que o Oracle não permite que você retorne implicitamente o resultado de uma consulta. O resultado sempre deve ser retornado explicitamente de alguma forma. A maneira mais simples é usar
DBMS_OUTPUT
(aproximadamente equivalente a print
) para gerar a variável:DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
No entanto, isso não é muito útil se você estiver tentando retornar um conjunto de resultados. Nesse caso, você desejará retornar uma coleção ou um refcursor. No entanto, usar qualquer uma dessas soluções exigiria envolver seu código em uma função ou procedimento e executar a função/procedimento de algo capaz de consumir os resultados. Uma função que funcionou dessa maneira pode ser algo assim:
CREATE FUNCTION my_function (myname in varchar2)
my_refcursor out sys_refcursor
BEGIN
open my_refcursor for
SELECT *
FROM Customers
WHERE Name = myname;
return my_refcursor;
END my_function;