sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo declaro y uso variables en PL/SQL como lo hago en T-SQL?

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;