Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment déclarer et utiliser des variables en PL/SQL comme je le fais en T-SQL ?

Réponse révisée

Si vous n'appelez pas ce code depuis un autre programme, une option consiste à ignorer PL/SQL et à le faire strictement en SQL en utilisant des variables de liaison :

var myname varchar2(20);

exec :myname := 'Tom';

SELECT *
FROM   Customers
WHERE  Name = :myname;

Dans de nombreux outils (tels que Toad et SQL Developer), omettre le var et exec feront en sorte que le programme vous demande la valeur.

Réponse originale

Une grande différence entre T-SQL et PL/SQL est qu'Oracle ne vous permet pas de renvoyer implicitement le résultat d'une requête. Le résultat doit toujours être renvoyé explicitement d'une manière ou d'une autre. Le plus simple est d'utiliser DBMS_OUTPUT (à peu près équivalent à print ) pour afficher la variable :

DECLARE
   myname varchar2(20);
BEGIN
     myname := 'Tom';

     dbms_output.print_line(myname);
END;

Cependant, ce n'est pas très utile si vous essayez de renvoyer un ensemble de résultats. Dans ce cas, vous voudrez soit retourner une collection, soit un refcursor. Cependant, l'utilisation de l'une ou l'autre de ces solutions nécessiterait d'encapsuler votre code dans une fonction ou une procédure et d'exécuter la fonction/procédure à partir d'un élément capable de consommer les résultats. Une fonction qui fonctionnait de cette façon pourrait ressembler à ceci :

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;