Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak deklarować i używać zmiennych w PL/SQL, tak jak robię to w T-SQL?

Poprawiona odpowiedź

Jeśli nie wywołujesz tego kodu z innego programu, opcją jest pominięcie PL/SQL i zrobienie tego ściśle w SQL przy użyciu zmiennych wiązania:

var myname varchar2(20);

exec :myname := 'Tom';

SELECT *
FROM   Customers
WHERE  Name = :myname;

W wielu narzędziach (takich jak Toad i SQL Developer) pomijanie var i exec instrukcje spowodują, że program poprosi o podanie wartości.

Oryginalna odpowiedź

Duża różnica między T-SQL i PL/SQL polega na tym, że Oracle nie pozwala niejawnie zwracać wyniku zapytania. Wynik zawsze musi być w jakiś sposób wyraźnie zwrócony. Najprostszym sposobem jest użycie DBMS_OUTPUT (w przybliżeniu odpowiednik print ), aby wyprowadzić zmienną:

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

     dbms_output.print_line(myname);
END;

Nie jest to jednak zbyt pomocne, jeśli próbujesz zwrócić zestaw wyników. W takim przypadku będziesz chciał zwrócić kolekcję lub refcursor. Jednak użycie jednego z tych rozwiązań wymagałoby zapakowania kodu w funkcję lub procedurę i uruchomienie funkcji/procedury z czegoś, co może zużywać wyniki. Funkcja, która działała w ten sposób, może wyglądać mniej więcej tak:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwersja z RAW(16) Oracle na GUID .NET

  2. Tryb stosowania przestoju i poprawki na gorąco w wersji R12.2

  3. jak zamienić wiele ciągów razem w Oracle

  4. IN vs OR Oracle, co szybciej?

  5. Przykład klauzuli WHEN wyzwalacza Oracle