Oracle
 sql >> Database >  >> RDS >> Oracle

Come posso dichiarare e utilizzare le variabili in PL/SQL come faccio in T-SQL?

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;