sql >> Databasteknik >  >> RDS >> Oracle

Hur man använder Kör omedelbart med INTO-klausul i Oracle Database

Kör omedelbart med INTO-klausul

Native dynamic SQL eller NDS hjälper utvecklare genom att tillhandahålla flexibilitet, förbättra prestanda och förenkla programmeringssyntaxer. Idag i denna handledning ska vi lära oss hur man skriver en dynamisk SQL-fråga i Oracle Database med hjälp av Execute Immediate Statement.

Så vad är en Execute Immediate Statement i Oracle Database?

Med Execute Immediate kan vi analysera och exekvera vilken SQL-sats som helst eller ett PL/SQL-block dynamiskt i Oracle Database. Och med dynamiskt menar jag vid körning.

Kör omedelbart tar bara ett argument. Det kan antingen vara en SQL-sats eller ett PL/SQL-block. Kompilatorn behandlar argumenten för Execute Immediate-satsen som strängen av VARCHAR2-datatyper. Se därför till att omge din SQL-fråga eller PL/SQL-block i paret av enkla citattecken ( ' ' ).

Kan vi använda vilken SQL-sats som helst med Execute Immediate?

Alla SQL-satser eller PL/SQL-block som returnerar en enda rad med resultat kan användas med Execute Immediate. Om ditt påstående ger mer än en rad med resultat finns det andra sätt. Dessutom kommer vi att diskutera dessa i framtida handledningar.

Vad är syntaxen för Execute Immediate Statement?

Syntax för Execute Immediate statement är ganska enkel. Låt oss ta en titt på det.

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

Var:

Kör omedelbart :Execute Immediate är en reserverad fras.

Dynamic_query :Följt av den reserverade frasen måste vi skriva vår dynamiska fråga. Den här frågan kan vara en SQL-sats eller ett PL/SQL-block. Dessutom behandlar kompilatorn den dynamiska frågan som en sträng av VARCHAR2-datatypen. Därför måste du se till att bifoga din fråga i ett par enkla citattecken.

INTO-sats :Med hjälp av INTO-satsen specificerar vi listan med användardefinierade variabler. Dessutom kommer dessa att hålla värdena som returneras av dynamisk SELECT-sats. Det är väldigt likt SELECT-INTO-satsen. Det är också en valfri klausul, så om du inte behöver den kan du utelämna den.

USING-sats :Om du har använt en bindningsvariabel i din dynamiska fråga kommer den här satsen att göra det möjligt för dig att ange värdena för den bindningsvariabeln. Dessa kommer i sin tur att ersättas i enlighet med detta under körtiden. Återigen, det är en valfri klausul.

ÅTERKOMMANDE ellerTILLBAKA TILL sats:Återgå till klausulen är motsatt till USING-satsen. När vi använder klausulen levererar vi värdena till den dynamiska frågan här i RETURNING INTO-satsen får vi värdena som returneras av den dynamiska frågan. Och lagra dem i den specificerade listan med bindningsargument. Återigen är det en valfri klausul.

Du kan också se den detaljerade förklaringen av syntaxen ovan i motsvarande video här.

Exempel på Execute Immediate statement.

Att göra en demonstration av exekvera omedelbart med alla ovan nämnda satser kommer att öka komplexiteten och göra exemplet svårt att förstå. Vilket är precis motsatsen till vad vi vill ha.

För att hålla konceptet enkelt och lätt att lära sig kommer vi att göra exemplet Execute Immediate med den första satsen som är INTO.

Kör omedelbart med INTO-satsen.

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;
/

Här är ett mycket enkelt exempel som visar hur man använder exekvera omedelbart med INTO klausul i Oracle Database. Låt oss se vad vi gjorde här.

Deklarationsavsnittet

I deklarationsavsnittet har vi deklarerat två variabler. Den första variabeln är sql_qry av VARCHAR 2-typ. Vi kommer att använda denna variabel för att lagra SELECT-satsen som vi vill köra med vår EXECUTE IMMEDIATE-sats. Eftersom den här variabeln kommer att innehålla en DML-sats måste vi se till att den har tillräcklig databredd.

Den andra är användardefinierad variabel emp_tot. Vi kommer att använda den här variabeln med INTO-satsen för att hålla data som returneras av vår SELECT-sats.

Utförandesektion

I det här avsnittet har vi bara tre påståenden. Dessa är:

Uttalande 1 :

I den första satsen tilldelar vi en giltig SQL-fråga till variabeln sql_qry.

Uttalande 2

Den andra satsen är EXECUTE IMMEDIATE – INTO-satsen. I detta uttalande direkt efter att vi skrivit den reserverade frasen execute omedelbart skriver vi namnet på variabeln sql_qry. Samma variabel som vi lagrar SELECT-satsen i.

Vid körning kommer runtime-motorn att ersätta den här variabeln med innehållet den har, vilket i vårt fall är en SELECT-sats. Om det inte finns något fel kommer runtime-motorn att köra den underliggande SELECT-satsen. Returnera därefter resultatet om det finns något.

Under tiden kommer vår SELECT-sats att returnera ett värde som är det totala antalet rader med anställdas tabell. Genom att använda INTO-satsen i EXECUTE IMMEDIATE-satsen lagrar vi det returnerande värdet i variabeln emp_tot.

Uttalande 3 :

Den tredje satsen är en utgångssats som använder vilken vi visar värdet på variabeln emp_tot tillbaka till användaren.

Information:
I fall av DML-transaktion krävs ett uttryckligt åtagande eftersom Execute Immediate inte automatiskt kommer att utföra en DML-transaktion.

Ett alternativt sätt att skriva detta exekveringsavsnitt är:

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

Om du vill kan du hoppa över det första påståendet helt. Skriv bara SQL-frågan direkt efter den reserverade frasen EXECUTE IMMEDIATE.

Titta på videon på min YouTube-kanal för att lära dig vad som är rätt sätt att skriva frågan för Execute Immediate.

Vad tycker ni?

Personligen gillar jag det tidigare sättet där vi använde variabeln för att lagra frågan. Och senare använde den variabeln med Execute Immediate. För det gör att vår kod ser snygg och ren ut. Dessutom hjälper det oss att hålla koll på vår fråga ifall vi någonsin vill ändra eller modifiera den.

Vad tycker ni? Vilket sätt att skriva Execute omedelbart gillar du bäst? Den förra eller den senare. Berätta för mig dina åsikter på min Facebook-sida eller på min Twitter.

Om du tycker att det är mycket praktiskt att lära sig genom att titta på videor kan du titta på videon på min YouTube-kanal. Och lär dig mer om Execute Immediate with INTO-satsen.

Hittills i denna handledning har vi lärt oss vad Execute Immediate Statement är och hur man använder detsamma för att köra en SQL-fråga dynamiskt med INTO-satsen i Oracle Database. Jag tror att det räcker för den här handledningen. Låt oss hålla det enkelt genom att inte sträcka det längre.

Se till att prenumerera på min YouTube-kanal för fler intressanta tutorials.

Tack och ha en bra dag!


  1. Hur Acosh() fungerar i PostgreSQL

  2. Kan inte ansluta till heroku postgresql-databas från lokal nodapp med uppföljare

  3. Hur hanterar man ett valfritt värde som returneras av en fråga med postgres-lådan?

  4. 5 skäl att välja Arkware