sql >> Database >  >> RDS >> Oracle

Hoe u Execute Immediate met INTO-clausule in Oracle Database gebruikt?

Direct uitvoeren met INTO-clausule

Native dynamische SQL of NDS helpt ontwikkelaars door flexibiliteit te bieden, de prestaties te verbeteren en de programmeersyntaxis te vereenvoudigen. Vandaag gaan we in deze tutorial leren hoe je een dynamische SQL-query schrijft in Oracle Database met behulp van Execute Immediate Statement.

Dus wat is een Execute Immediate Statement in Oracle Database?

Met Execute Immediate kunnen we elk SQL-statement of een PL/SQL-blok dynamisch ontleden en uitvoeren in Oracle Database. En met dynamisch bedoel ik tijdens runtime.

Direct uitvoeren heeft slechts één argument nodig. Het kan een SQL-statement of een PL/SQL-blok zijn. Compiler behandelt de argumenten van de instructie Execute Immediate als de reeks VARCHAR2-gegevenstypen. Zorg er daarom voor dat u uw SQL-query of PL/SQL-blok tussen het paar enkele aanhalingstekens ( ‘ ’ ) plaatst.

Kunnen we een SQL-statement gebruiken met Execute Immediate?

Elke SQL-instructie of PL/SQL-blok dat een enkele rij resultaten retourneert, kan worden gebruikt met Execute Immediate. Bovendien, als uw statement meer dan één rij resultaten oplevert, zijn er andere manieren. Daarnaast zullen we deze in toekomstige tutorials bespreken.

Wat is de syntaxis van Execute Immediate Statement?

De syntaxis van de Execute Immediate-instructie is vrij eenvoudig. Laten we er eens naar kijken.

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

Waar:

Direct uitvoeren :Execute Immediate is een gereserveerde zin.

Dynamic_query :Gevolgd door de gereserveerde zin moeten we onze dynamische query schrijven. Deze query kan een SQL-instructie of een PL/SQL-blok zijn. Bovendien behandelt de compiler de dynamische query als een string van het gegevenstype VARCHAR2. Daarom moet u ervoor zorgen dat u uw zoekopdracht tussen enkele enkele aanhalingstekens plaatst.

INTO-clausule :Met de INTO-clausule specificeren we de lijst met door de gebruiker gedefinieerde variabelen. Bovendien bevatten deze de waarden die worden geretourneerd door de dynamische SELECT-instructie. Het lijkt erg op de SELECT-INTO-instructie. Het is ook een optionele clausule, dus als je het niet nodig hebt, kun je het weglaten.

USING-clausule :Als u een bindvariabele in uw dynamische query hebt gebruikt, kunt u met deze clausule de waarden voor die bindvariabele specificeren. Deze worden op hun beurt dienovereenkomstig vervangen tijdens de runtime. Nogmaals, het is een optionele clausule.

TERUGKEER of TERUG NAAR clausule:Return into clausule is tegengesteld aan de USING-clausule. Terwijl we bij het gebruik van de clausule de waarden aan de dynamische query leveren, hier in de RETURNING INTO-clausule krijgen we de waarden die worden geretourneerd door de dynamische query. En sla ze op in de opgegeven lijst met bindargumenten. Nogmaals, het is een optionele clausule.

Je kunt hier ook de gedetailleerde uitleg van de bovenstaande syntaxis in de bijbehorende video bekijken.

Voorbeeld van Execute Immediate statement.

Het uitvoeren van een demonstratie van onmiddellijk uitvoeren met behulp van alle bovengenoemde clausules zal de complexiteit vergroten en het voorbeeld moeilijk te begrijpen maken. Dat is precies het tegenovergestelde van wat we willen.

Dus om het concept eenvoudig en gemakkelijk te leren te houden, zullen we het voorbeeld van Execute Immediate doen met behulp van de eerste clausule die INTO is.

Voer onmiddellijk uit met de INTO-clausule.

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

Hier is een heel eenvoudig voorbeeld dat laat zien hoe u execute direct kunt gebruiken met INTO clausule in Oracle Database. Laten we eens kijken wat we hier hebben gedaan.

Declaratiesectie

In de declaratiesectie hebben we twee variabelen gedeclareerd. De eerste variabele is sql_qry van het type VARCHAR 2. We zullen deze variabele gebruiken om de SELECT-instructie op te slaan die we willen uitvoeren met onze EXECUTE IMMEDIATE-instructie. Omdat deze variabele een DML-instructie gaat bevatten, moeten we ervoor zorgen dat deze voldoende gegevensbreedte heeft.

De tweede is de door de gebruiker gedefinieerde variabele emp_tot. We zullen deze variabele met INTO-clausule gebruiken om de gegevens te bewaren die worden geretourneerd door onze SELECT-instructie.

Uitvoeringssectie

In deze sectie hebben we slechts drie uitspraken. Dit zijn:

Verklaring 1 :

In de eerste instructie wijzen we een geldige SQL-query toe aan de variabele sql_qry.

Verklaring 2

Het tweede statement is het EXECUTE IMMEDIATE – INTO statement. In deze verklaring, direct na het schrijven van de gereserveerde zin execute onmiddellijk, schrijven we de naam van de variabele sql_qry. Dezelfde variabele waarin we de SELECT-instructie opslaan.

Bij uitvoering zal de runtime-engine deze variabele vervangen door de inhoud die deze bevat, wat in ons geval een SELECT-instructie is. Als er geen fout is, voert de runtime-engine de onderliggende SELECT-instructie uit. Retourneer daarna het resultaat als dat er is.

Ondertussen retourneert onze SELECT-instructie een waarde die het totale aantal rijen van de werknemerstabel is. Met behulp van de INTO-clausule van de EXECUTE IMMEDIATE-instructie zullen we die terugkerende waarde opslaan in de variabele emp_tot.

Verklaring 3 :

Het derde statement is een outputstatement waarmee we de waarde van de variabele emp_tot teruggeven aan de gebruiker.

Informatie:
In het geval van een DML-transactie is een expliciete vastlegging vereist, aangezien Direct uitvoeren niet automatisch een DML-transactie zal uitvoeren.

Een alternatieve manier om deze uitvoeringssectie te schrijven is:

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

Als u wilt, kunt u de eerste verklaring volledig overslaan. Schrijf de SQL-query gewoon direct na de gereserveerde zin IMMEDIATE UITVOEREN.

Bekijk de video op mijn YouTube-kanaal om te zien wat de juiste manier is om de query voor Direct uitvoeren te schrijven.

Wat vinden jullie ervan?

Persoonlijk hou ik van de vroegere manier waarop we de variabele gebruikten voor het opslaan van de query. En later die variabele gebruikt met Execute Immediate. Want daardoor ziet onze code er netjes en schoon uit. Bovendien helpt het ons om onze zoekopdracht bij te houden voor het geval we deze ooit willen veranderen of aanpassen.

wat denken jullie? Welke schrijfwijze Execute Immediate bevalt u het beste? De eerste of de laatste. Vertel me je mening op mijn Facebook-pagina of op mijn Twitter.

Als je het leren door video's veel gemakkelijker vindt, kun je de video bekijken op mijn YouTube-kanaal. En leer meer over Execute Immediate met INTO-clausule.

Tot dusver hebben we in deze tutorial geleerd wat de Execute Immediate Statement is en hoe deze te gebruiken voor het dynamisch uitvoeren van een SQL-query met behulp van de INTO-clausule in Oracle Database. Ik denk dat dat genoeg is voor deze tutorial. Laten we het simpel houden door het niet verder uit te rekken.

Zorg ervoor dat je je abonneert op mijn YouTube-kanaal voor meer interessante tutorials.

Bedankt en een fijne dag verder!


  1. MAX() Functie in PostgreSQL

  2. 8 manieren om microseconden toe te voegen aan een datetime-waarde in MariaDB

  3. Docker-compose gebruiken om tabellen te maken in de postgresql-database

  4. Meerdere manieren om duplicaten uit SQL-tabellen te verwijderen