Tabel DDL maken met Direct uitvoeren
Je moet denken dat wat het probleem zou kunnen zijn bij het uitvoeren van een CREATE TABLE DDL? Juist, geen probleem zolang je ze uitvoert met SQL. Maar als het erop aankomt ze uit te voeren met PL/SQL, dan is dat best lastig.
Dus eerst, wat zijn DDL-statements in Oracle Database?
DDL staat voor Data Definition Language. Met behulp van DDL-statements kunnen we zowel de database-objecten als de schema's maken of wijzigen. Deze uitspraken zijn:
- MAKEN,
- DROP en
- VERANDER.
Het is altijd een goede gewoonte om uw schema's en objecten van tevoren in te delen en deze in de beginfase van uw project te maken. Indien mogelijk moeten we dit werk doen met behulp van SQL. Dat kan veel sneller en veel schoner. Maar soms is het niet altijd mogelijk, in die situatie kunnen we hulp gebruiken van functies zoals Native Dynamic SQL in Oracle Database.
Native Dynamic SQL stelt ons in staat om SQL-statements zoals DDL of DML rechtstreeks via onze PL/SQL uit te voeren.
Waarom kunnen we DDL niet uitvoeren via een PL/SQL-programma?
Als je je nog steeds afvraagt of het uitvoeren van een DDL-statement met PL/SQL zo ingewikkeld is, laten we dan proberen een tabel te maken via een PL/SQL-programma.
SET SERVEROUTPUT ON; BEGIN CREATE TABLE tut_82 ( tut_num NUMBER(3), tut_name VARCHAR2 (50)); END; /
Ik weet dat deze benadering je eerste gedachte zou zijn geweest als ik je had gevraagd om een tabel te maken via een PL/SQL-programma. Ik bedoel, dit ziet er perfect uit, wat kan er mis gaan?
Er is niets mis met dit programma, het enige probleem hier is dat PL/SQL niet direct DDL-statements ondersteunt. Om een DDL-statement met PL/SQL uit te voeren, hebben we ofwel hulp nodig van het DBMS_SQL-pakket of de geavanceerde en verbeterde manier van de NATIVE DYNAMIC SQL.
U kunt dit zelf nakijken. Ga je gang en voer het bovenstaande programma uit. Bij uitvoering krijgt u een foutmelding die er ongeveer zo uitziet als in de onderstaande afbeelding.
Dus, wat is de juiste manier om een DDL via PL/SQL-programma uit te voeren?
U kunt een DDL via PL/SQL-programma uitvoeren door het DBMS_SQL-pakket te gebruiken of door de instructie Execute Immediate van Native Dynamic SQL te gebruiken. De laatste optie is de meest gebruikte optie, vooral tegenwoordig vanwege de betere prestaties en de gemakkelijk te leren syntaxis.
Hoe CREATE TABLE DDL uitvoeren met Execute Immediate in Oracle Database?
Stap 1:Bereid uw DDL van tevoren voor.
Hoewel het niet nodig is, raad ik je aan om je DDL van tevoren voor te bereiden, op die manier kun je in ieder geval de kans op syntactische fouten door de syntaxis van je DDL-statement elimineren.
In ons geval willen we een CREATE TABLE DDL uitvoeren, dus laten we eerst een DDL schrijven voor het maken van een tabel.
CREATE TABLE tut_82 ( tut_num NUMBER (3), tut_name VARCHAR2 (50) )
Deze DDL-instructie maakt een tabel aan met de naam tut_82 met twee kolommen tut_num van het gegevenstype NUMBER en tut_name van het gegevenstype VARCHAR2.
Let op, beëindig uw SQL-statement (degene die u wilt uitvoeren met EXECUTE IMMEDIATE) niet met een puntkomma.
Stap 2:Voer uw DDL door het PL/SQL-programma uit met Execute Immediate.
Nadat u uw DDL hebt voorbereid, moet u uw PL/SQL-programma schrijven.
SET SERVEROUTPUT ON; DECLARE ddl_qry VARCHAR2 (150); BEGIN ddl_qry := 'CREATE TABLE tut_82( tut_num NUMBER(3), tut_name VARCHAR2(50) )'; EXECUTE IMMEDIATE ddl_qry; END; /
In het bovenstaande PL/SQL-blok hebben we een variabele gedeclareerd met de naam ddl_qry. We hebben deze variabele gebruikt om ons DDL-statement te bewaren dat we in stap 1 hebben voorbereid.
Informatie:
Eén ding dat u hier moet controleren, is dat de variabele die u gaat gebruiken voor het opslaan van de SQL-instructie die u wilt uitvoeren met uw EXECUTE IMMEDIATE-instructie altijd van het gegevenstype VARCHAR2 moet zijn en hebben veel gegevensbreedte zodat uw DDL er gemakkelijk in zou kunnen passen.
In de uitvoeringssectie van dit PL/SQL-blok hebben we twee uitvoerbare instructies. Deze uitspraken zijn:
Verklaring 1:Opdrachtverklaring
In de eerste instructie hebben we onze Create Table DDL opgeslagen in de variabele ddl_qry met behulp van de toewijzingsoperator (in PL/SQL is de toewijzingsoperator de combinatie van dubbele punten en gelijk aan teken).
Verklaring 2:The Mighty Execute Onmiddellijke verklaring
Het tweede statement is het Execute Statement. Om een DDL dynamisch uit te voeren, moet je eerst de gereserveerde zin 'Execute Immediate' schrijven, gevolgd door de variabelenaam waarin je je DDL hebt opgeslagen zoals we hierboven hebben gedaan.
Als je wilt, kun je je DDL ook direct achter de zin 'Gereserveerde zin' schrijven. Het is volledig een persoonlijke keuze. Ik gebruik graag de eerste benadering waarbij we Variabele gebruiken voor het vasthouden van de DDL, omdat het in de eerste plaats je code er netjes en schoon uit laat zien en bovendien het opsporen van fouten een stuk eenvoudiger maakt.
Maar Manish, ik wil ook de andere manier leren om het DDL-statement te schrijven.
Natuurlijk, er is niets mis mee om iets nieuws te leren.
BEGIN EXECUTE IMMEDIATE 'CREATE TABLE tut_82( tut_num NUMBER(3), tut_name VARCHAR2(50) )'; END; /
De alternatieve benadering van de bovenstaande code is om de DDL-instructie direct in uw Execute Immediate-instructie te schrijven. Hiervoor moet je eerst de gereserveerde frase Execute Immediate schrijven gevolgd door het DDL-statement dat je dynamisch wilt uitvoeren.
Op beide manieren hoef je maar een paar dingen te regelen tijdens het schrijven van de DDL voor Execute Immediate.
Eerst:plaats uw SQL-instructie altijd tussen een paar enkele aanhalingstekens
Onthoud altijd dat Direct uitvoeren DDL of DML of andere ondersteunde SQL-instructies die u dynamisch wilt uitvoeren, behandelt als een reeks van VARCHAR2-gegevenstype en in PL/SQL omsluiten we elk teken of VARCHAR2-tekenreeks in een paar enkele aanhalingstekens. Zorg er dus altijd voor dat u uw SQL-instructie die u wilt uitvoeren met Execute Immediate tussen een paar enkele aanhalingstekens plaatst.
Ten tweede:zorg voor puntkomma.
Als u een SQL-statement schrijft voor Execute Immediate, dan moet u de puntkomma (;) net buiten de enkele aanhalingstekens plaatsen waarin u uw SQL-statement hebt ingesloten. Aan de andere kant, als u een PL/SQL-blok schrijft voor dynamische uitvoering met behulp van Execute Immediate, dan moet u de puntkomma aan het einde van uw PL/SQL-blok plaatsen, net voor het enkele afsluitende aanhalingsteken en net buiten de enkele afsluitende aanhalingstekens.
Dat is de gedetailleerde zelfstudie over het uitvoeren van de Create Table DDL-instructie met behulp van de EXECUTE IMMEDIATE-instructie van Native Dynamic SQL in Oracle Database. Ik hoop dat je ervan genoten hebt en iets nieuws hebt geleerd.
Zorg ervoor dat je je abonneert op mijn YouTube-kanaal, want in de volgende tutorial zullen we iets nieuws en interessants leren over de dynamische SQL. Je kunt me ook volgen op mijn Twitter en Facebook.
Bedankt en een fijne dag verder!