sql >> Databáze >  >> RDS >> Oracle

Jak mohu deklarovat a používat proměnné v PL/SQL jako v T-SQL?

Upravená odpověď

Pokud tento kód nevoláte z jiného programu, možností je přeskočit PL/SQL a provést to výhradně v SQL pomocí proměnných vazeb:

var myname varchar2(20);

exec :myname := 'Tom';

SELECT *
FROM   Customers
WHERE  Name = :myname;

V mnoha nástrojích (jako je Toad a SQL Developer) vynechání var a exec příkazy způsobí, že vás program vyzve k zadání hodnoty.

Původní odpověď

Velký rozdíl mezi T-SQL a PL/SQL je v tom, že Oracle vám nedovolí implicitně vrátit výsledek dotazu. Výsledek se vždy musí nějakým způsobem explicitně vrátit. Nejjednodušší způsob je použít DBMS_OUTPUT (přibližně ekvivalentní print ) pro výstup proměnné:

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

     dbms_output.print_line(myname);
END;

To však není příliš užitečné, pokud se pokoušíte vrátit sadu výsledků. V takovém případě budete chtít vrátit kolekci nebo rekurzor. Použití kteréhokoli z těchto řešení by však vyžadovalo zabalení kódu do funkce nebo procedury a spuštění funkce/procedury z něčeho, co je schopné spotřebovat výsledky. Funkce, která fungovala tímto způsobem, může vypadat nějak takto:

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;


  1. Způsob, jak extrahovat data hodnoty DateTime bez sekund

  2. Zlepšení horního / horního sestupného středního řešení

  3. Už žádné SPU

  4. SqlConnection.Close() uvnitř příkazu using