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

Jak używać wykonania natychmiastowego z klauzulą ​​INTO w bazie danych Oracle

Wykonaj natychmiast z klauzulą ​​INTO

Natywny dynamiczny SQL lub NDS pomaga programistom, zapewniając elastyczność, poprawiając wydajność i upraszczając składnie programowania. Dzisiaj w tym samouczku dowiemy się, jak napisać zapytanie dynamicznego SQL w bazie danych Oracle przy użyciu instrukcji Execute Immediate Statement.

Czym więc jest instrukcja Execute Immediate w bazie danych Oracle?

Używając Execute Immediate możemy dynamicznie analizować i wykonywać dowolne instrukcje SQL lub blok PL/SQL w Oracle Database. I dynamicznie mam na myśli w czasie wykonywania.

Wykonanie natychmiastowe zajmuje tylko jeden argument. Może to być instrukcja SQL lub blok PL/SQL. Kompilator traktuje argumenty instrukcji Execute Immediate jako ciąg typów danych VARCHAR2. Dlatego pamiętaj o umieszczeniu zapytania SQL lub bloku PL/SQL w parze pojedynczych cudzysłowów ( „ ”).

Czy możemy użyć dowolnej instrukcji SQL z Execute Immediate?

Dowolna instrukcja SQL lub blok PL/SQL, który zwraca pojedynczy wiersz wyników, może być używany z funkcją Execute Immediate. Ponadto, jeśli Twoje oświadczenie zwraca więcej niż jeden wiersz wyników, istnieją inne sposoby. Dodatkowo omówimy je w przyszłych samouczkach.

Jaka jest składnia polecenia Execute Immediate Statement?

Składnia instrukcji Execute Immediate jest dość prosta. Rzućmy okiem na to.

EXECUTE IMMEDIATE dynamic_query
[INTO user_defined_variable-1, user_defined_variable-2…]
[USING bind_argument-1, bind_argument-2…]
[RETURNING|RETURN-INTO clause];  

Gdzie:

Wykonaj natychmiast :Wykonaj natychmiast jest zastrzeżoną frazą.

Dynamic_query :Po zastrzeżonym frazie musimy napisać nasze dynamiczne zapytanie. To zapytanie może być instrukcją SQL lub blokiem PL/SQL. Ponadto kompilator traktuje dynamiczne zapytanie jako ciąg typu danych VARCHAR2. Dlatego musisz upewnić się, że Twoje zapytanie zawiera parę pojedynczych cudzysłowów.

Klauzula INTO :Za pomocą klauzuli INTO określamy listę zmiennych zdefiniowanych przez użytkownika. Ponadto będą one przechowywać wartości zwracane przez dynamiczną instrukcję SELECT. Jest bardzo podobny do instrukcji SELECT-INTO. Jest to również klauzula opcjonalna, więc jeśli jej nie potrzebujesz, możesz ją pominąć.

klauzula USING :W przypadku użycia zmiennej wiązania w zapytaniu dynamicznym, ta klauzula umożliwi określenie wartości tej zmiennej wiązania. Te z kolei zostaną odpowiednio zastąpione w czasie działania. Ponownie jest to klauzula opcjonalna.

ZWROT lub POWRÓT DO klauzula:Return to klauzula jest przeciwieństwem klauzuli USING. Podczas gdy używając klauzuli dostarczamy wartości do dynamicznego zapytania, tutaj w klauzuli RETURNING INTO otrzymujemy wartości zwracane przez dynamiczne zapytanie. I zapisz je na określonej liście argumentów wiązania. Ponownie jest to klauzula opcjonalna.

Możesz również obejrzeć szczegółowe wyjaśnienie powyższej składni w odpowiednim filmie tutaj.

Przykład wykonania instrukcji natychmiastowej.

Wykonanie demonstracji natychmiastowego wykonania przy użyciu wszystkich wyżej wymienionych klauzul zwiększy złożoność i sprawi, że przykład będzie trudny do zrozumienia. Co jest dokładnym przeciwieństwem tego, czego chcemy.

Tak więc, aby koncepcja była prosta i łatwa do nauczenia, zrobimy przykład Execute Immediate, używając pierwszej klauzuli, która jest INTO.

Wykonaj natychmiast z klauzulą ​​INTO.

SET SERVEROUTPUT ON;
DECLARE
    sql_qry     VARCHAR2 (150);
    emp_tot     NUMBER(3);
BEGIN
    
    sql_qry:= ‘SELECT count (*) FROM employees';
    EXECUTE IMMEDIATE sql_qry INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot);

END;
/

Oto bardzo prosty przykład pokazujący, jak korzystać z funkcji wykonaj natychmiast z INTO klauzula w bazie danych Oracle. Zobaczmy, co tutaj zrobiliśmy.

Sekcja deklaracji

W sekcji deklaracji zadeklarowaliśmy dwie zmienne. Pierwsza zmienna to sql_qry typu VARCHAR 2. Wykorzystamy tę zmienną do przechowywania instrukcji SELECT, którą chcemy wykonać za pomocą naszej instrukcji EXECUTE IMMEDIATE. Ponieważ ta zmienna będzie zawierać instrukcję DML, musimy upewnić się, że ma wystarczającą szerokość danych.

Druga to zmienna zdefiniowana przez użytkownika emp_tot. Będziemy używać tej zmiennej z klauzulą ​​INTO do przechowywania danych zwróconych przez naszą instrukcję SELECT.

Sekcja wykonania

W tej sekcji mamy tylko trzy stwierdzenia. Są to:

Oświadczenie 1 :

W pierwszej instrukcji przypisujemy prawidłowe zapytanie SQL do zmiennej sql_qry.

Oświadczenie 2

Druga instrukcja to instrukcja EXECUTE IMMEDIATE – INTO. W tej instrukcji zaraz po wpisaniu zastrzeżonej frazy wykonaj natychmiast podajemy nazwę zmiennej sql_qry. Ta sama zmienna, w której przechowujemy instrukcję SELECT.

Podczas wykonywania silnik wykonawczy zastąpi tę zmienną zawartością, którą przechowuje, co w naszym przypadku jest instrukcją SELECT. Jeśli nie ma błędu, silnik wykonawczy wykona podstawową instrukcję SELECT. Następnie zwróć jego wynik, jeśli taki istnieje.

Tymczasem nasza instrukcja SELECT zwróci wartość, która jest całkowitą liczbą wierszy tabeli pracowników. Używając klauzuli INTO instrukcji EXECUTE IMMEDIATE, przechowamy zwracaną wartość w zmiennej emp_tot.

Oświadczenie 3 :

Trzecia instrukcja jest instrukcją wyjściową, za pomocą której wyświetlamy użytkownikowi wartość zmiennej emp_tot.

Informacje:
W przypadku transakcji DML wymagane jest wyraźne zatwierdzenie, ponieważ wykonanie natychmiastowe nie spowoduje automatycznego zatwierdzenia transakcji DML.

Alternatywnym sposobem napisania tej sekcji wykonania jest:

BEGIN
    EXECUTE IMMEDIATE 'SELECT count (*) FROM employees' INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); 
END;
/

Jeśli chcesz, możesz całkowicie pominąć pierwsze stwierdzenie. Wystarczy napisać zapytanie SQL bezpośrednio po zarezerwowanej frazie EXECUTE IMMEDIATE.

Obejrzyj film wideo na moim kanale YouTube, aby dowiedzieć się, jaki jest prawidłowy sposób napisania zapytania dla wykonania natychmiastowego.

Co myślicie?

Osobiście podoba mi się poprzedni sposób, w którym użyliśmy zmiennej do przechowywania zapytania. A później użył tej zmiennej z Execute Immediate. Ponieważ to sprawia, że ​​nasz kod wygląda schludnie i czysto. Co więcej, pomaga nam to śledzić nasze zapytanie na wypadek, gdybyśmy kiedykolwiek chcieli je zmienić lub zmodyfikować.

Co myślicie? Który sposób pisania Execute Immediate najbardziej Ci się podoba? Ten pierwszy lub drugi. Podzielcie się swoimi opiniami na mojej stronie na Facebooku lub Twitterze.

Jeśli nauka poprzez oglądanie filmów jest dla Ciebie bardzo wygodna, możesz obejrzeć film na moim kanale YouTube. I dowiedz się o Execute Immediate z klauzulą ​​INTO.

Do tej pory w tym samouczku dowiedzieliśmy się, czym jest instrukcja Execute Immediate i jak jej używać do dynamicznego wykonywania zapytania SQL przy użyciu klauzuli INTO w bazie danych Oracle. Myślę, że to wystarczy na ten samouczek. Zachowajmy prostotę, nie rozciągając jej dalej.

Pamiętaj, aby subskrybować mój kanał YouTube, aby uzyskać więcej interesujących samouczków.

Dzięki i życzę miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CURRENT_DATE Funkcja w Oracle

  2. Problemy z wywoływaniem procedury składowanej z C# z dużym CLOB

  3. Błąd 1033 otrzymał logowanie do trybu gotowości

  4. Problem z budowaniem cx_Oracle - libclntsh.so.11.1 => nie znaleziono

  5. Data Oracle na konwersję ciągu