Risposta modificata
Se non stai chiamando questo codice da un altro programma, un'opzione è saltare PL/SQL e farlo rigorosamente in SQL usando le variabili bind:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
In molti strumenti (come Toad e SQL Developer), omettendo il var
e exec
istruzioni faranno sì che il programma richieda il valore.
Risposta originale
Una grande differenza tra T-SQL e PL/SQL è che Oracle non consente di restituire implicitamente il risultato di una query. Il risultato deve sempre essere restituito in modo esplicito in qualche modo. Il modo più semplice è usare DBMS_OUTPUT
(più o meno equivalente a print
) per produrre la variabile:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Tuttavia, questo non è molto utile se stai cercando di restituire un set di risultati. In tal caso, vorrai restituire una raccolta o un ripensatore. Tuttavia, l'utilizzo di una di queste soluzioni richiederebbe il wrapping del codice in una funzione o procedura e l'esecuzione della funzione/procedura da qualcosa che è in grado di consumare i risultati. Una funzione che ha funzionato in questo modo potrebbe assomigliare a questa:
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;