Respuesta revisada
Si no está llamando a este código desde otro programa, una opción es omitir PL/SQL y hacerlo estrictamente en SQL usando variables de vinculación:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
En muchas herramientas (como Toad y SQL Developer), al omitir var
y exec
declaraciones harán que el programa le solicite el valor.
Respuesta original
Una gran diferencia entre T-SQL y PL/SQL es que Oracle no le permite devolver implícitamente el resultado de una consulta. El resultado siempre tiene que devolverse explícitamente de alguna manera. La forma más sencilla es usar DBMS_OUTPUT
(más o menos equivalente a print
) para generar la variable:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Sin embargo, esto no es muy útil si está tratando de devolver un conjunto de resultados. En ese caso, querrá devolver una colección o un refcursor. Sin embargo, usar cualquiera de esas soluciones requeriría envolver su código en una función o procedimiento y ejecutar la función/procedimiento desde algo que sea capaz de consumir los resultados. Una función que funcionó de esta manera podría verse así:
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;