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

Jak používat klauzuli Execute Immediate with INTO v databázi Oracle

Okamžité provedení s doložkou INTO

Nativní dynamické SQL nebo NDS pomáhá vývojářům tím, že poskytuje flexibilitu, zlepšuje výkon a zjednodušuje syntaxi programování. Dnes se v tomto tutoriálu naučíme, jak napsat dynamický SQL dotaz v Oracle Database pomocí Execute Immediate Statement.

Co je tedy provedení okamžitého příkazu v databázi Oracle?

Pomocí Execute Immediate můžeme dynamicky analyzovat a provádět jakýkoli SQL příkaz nebo blok PL/SQL v databázi Oracle. A dynamicky myslím za běhu.

Okamžité provedení vyžaduje pouze jeden argument. Může to být buď příkaz SQL, nebo blok PL/SQL. Kompilátor zachází s argumenty příkazu Execute Immediate jako s řetězcem datových typů VARCHAR2. Ujistěte se proto, že jste svůj SQL dotaz nebo PL/SQL blok uzavřeli do dvojice jednoduchých uvozovek ( ' ).

Můžeme použít jakýkoli příkaz SQL s příkazem Execute Immediate?

S Execute Immediate lze použít jakýkoli příkaz SQL nebo blok PL/SQL, který vrací jeden řádek výsledků. Kromě toho, pokud váš příkaz vrací více než jeden řádek výsledků, existují další způsoby. Navíc o nich budeme diskutovat v budoucích tutoriálech.

Jaká je syntaxe příkazu Execute Immediate Statement?

Syntaxe příkazu Execute Immediate je velmi jednoduchá. Pojďme se na to podívat.

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

Kde:

Provést okamžitě :Execute Immediate je vyhrazená fráze.

Dynamický_dotaz :Po vyhrazené frázi musíme napsat náš dynamický dotaz. Tento dotaz může být příkaz SQL nebo blok PL/SQL. Navíc kompilátor zachází s dynamickým dotazem jako s řetězcem datového typu VARCHAR2. Proto se musíte ujistit, že svůj dotaz uzavřete do jednoduchých uvozovek.

klauzule INTO :Pomocí klauzule INTO specifikujeme seznam uživatelsky definovaných proměnných. Kromě toho budou obsahovat hodnoty vrácené dynamickým příkazem SELECT. Je velmi podobný příkazu SELECT-INTO. Je to také volitelná klauzule, takže pokud ji nevyžadujete, můžete ji vynechat.

Ustanovení USING :V případě, že jste ve svém dynamickém dotazu použili proměnnou vazby, pak vám tato klauzule umožní zadat hodnoty pro tuto proměnnou vazby. Ty budou následně během běhu odpovídajícím způsobem nahrazeny. Opět se jedná o nepovinnou klauzuli.

VRACÍ SE neboNÁVRAT DO klauzule:Návrat do klauzule je opakem klauzule USING. Zatímco při použití klauzule dodáváme hodnoty dynamickému dotazu, zde v klauzuli RETURNING INTO dostáváme hodnoty vrácené dynamickým dotazem. A uložte je do zadaného seznamu argumentů vazby. Opět se jedná o nepovinnou klauzuli.

Podrobné vysvětlení výše uvedené syntaxe si také můžete prohlédnout v příslušném videu zde.

Příklad příkazu Execute Immediate.

Provedení demonstrace okamžitého provedení pomocí všech výše uvedených klauzulí zvýší složitost a ztíží pochopení příkladu. Což je přesný opak toho, co chceme.

Aby byl koncept jednoduchý a snadno se naučil, uvedeme příklad Execute Immediate s použitím první věty, která je INTO.

Proveďte okamžitě s 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;
/

Zde je velmi jednoduchý příklad demonstrující, jak použít okamžité spuštění pomocí INTO klauzule v databázi Oracle. Podívejme se, co jsme zde udělali.

Část prohlášení

V sekci deklarace jsme deklarovali dvě proměnné. První proměnná je sql_qry typu VARCHAR 2. Tuto proměnnou použijeme k uložení příkazu SELECT, který chceme provést pomocí příkazu EXECUTE IMMEDIATE. Protože tato proměnná bude obsahovat příkaz DML, musíme se ujistit, že má dostatečnou šířku dat.

Druhou je uživatelsky definovaná proměnná emp_tot. Tuto proměnnou budeme používat s klauzulí INTO k uchování dat vrácených naším příkazem SELECT.

Sekce provádění

V této části máme pouze tři prohlášení. Jsou to:

Prohlášení 1 :

V prvním příkazu přiřazujeme platný SQL dotaz proměnné sql_qry.

Prohlášení 2

Druhým příkazem je příkaz EXECUTE IMMEDIATE – INTO. V tomto příkazu hned po zapsání vyhrazené fráze proveďte okamžité zapsání názvu proměnné sql_qry. Stejná proměnná, do které ukládáme příkaz SELECT.

Při spuštění runtime engine nahradí tuto proměnnou obsahem, který uchovává, což je v našem případě příkaz SELECT. Pokud nedojde k žádné chybě, runtime modul provede základní příkaz SELECT. Poté vraťte výsledek, pokud nějaký existuje.

Mezitím náš příkaz SELECT vrátí hodnotu, která je celkovým počtem řádků tabulky zaměstnanců. Pomocí klauzule INTO příkazu EXECUTE IMMEDIATE uložíme tuto návratovou hodnotu do proměnné emp_tot.

Prohlášení 3 :

Třetí příkaz je výstupní příkaz, pomocí kterého zobrazujeme hodnotu proměnné emp_tot zpět uživateli.

Informace:
V případě transakce DML je vyžadováno explicitní potvrzení, protože příkaz Execute Immediate automaticky nepotvrdí transakci DML.

Alternativní způsob zápisu této sekce provádění je:

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

Pokud chcete, můžete první příkaz úplně přeskočit. Stačí napsat SQL dotaz přímo za vyhrazenou frázi EXECUTE IMMEDIATE.

Podívejte se prosím na video na mém kanálu YouTube, kde se dozvíte, jaký je správný způsob psaní dotazu pro Execute Immediate.

Co si myslíte?

Osobně se mi líbí první způsob, kdy jsme použili proměnnou pro uložení dotazu. A později tuto proměnnou použil s Execute Immediate. Protože díky tomu vypadá náš kód úhledně a čistě. Navíc nám pomáhá sledovat náš dotaz pro případ, že bychom jej někdy chtěli změnit nebo upravit.

Co si myslíte? Jaký způsob psaní Execute Immediate máte nejraději? Ten první nebo ten druhý. Sdělte mi své názory na mé stránce na Facebooku nebo na mém Twitteru.

Pokud považujete učení prostřednictvím sledování videí za velmi pohodlné, můžete se na video podívat na mém kanálu YouTube. A přečtěte si o Execute Immediate s klauzulí INTO.

V tomto tutoriálu jsme se zatím naučili, co je to Execute Immediate Statement a jak jej použít pro dynamické provádění SQL dotazu pomocí klauzule INTO v databázi Oracle. Myslím, že to pro tento tutoriál stačí. Pojďme to zjednodušit tím, že to nebudeme dále roztahovat.

Nezapomeňte se přihlásit k odběru mého kanálu YouTube pro další zajímavé návody.

Děkuji a přeji hezký den!


  1. Vyberte náhodný řádek pro každou skupinu

  2. ReadyCloud ReadyShipper X

  3. O SQLite

  4. Nainstalujte PostgreSQL na Ubuntu 20.04