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;