sql >> Database >  >> RDS >> Oracle

Tabel DDL maken met Direct uitvoeren in Oracle Database Part 2

Tabel DDL maken met Direct uitvoeren

Er zijn twee manieren om een ​​Create table DDL-query te schrijven voor Execute Immediate-statement van Native Dynamic SQL in Oracle Database. We hebben er al een besproken in de laatste tutorial. De eerste manier die we in de vorige tutorial hebben besproken, is waarschijnlijk de gemakkelijkste manier om een ​​SQL-query voor Dynamic SQL te schrijven. Maar dat weerhoudt ons er niet van om verder te leren. Dus laten we verder gaan en de tweede leren.

Dus in deze tutorial leren we de tweede methode voor het schrijven van een CREATE TABLE DDL voor dynamische uitvoering met behulp van Execute Immediate Statement.

Aangezien deze tutorial een voortzetting is van de vorige, verzoek ik je om eerst die blog door te nemen voor een beter begrip. Dat gezegd hebbende, laten we beginnen met de tutorial.

Stap 1:bereid de CREATE TABLE DDL voor.

Bereid vooraf uw SQL-query voor die u dynamisch wilt uitvoeren. Dit vermindert de codeverwarring en minimaliseert ook de syntactische fout.

CREATE TABLE tut_83 (
                tut_num     NUMBER(5),
                tut_name    VARCHAR2 (50),
                CONSTRAINT cons1_col1_pid_pk PRIMARY KEY (tut_num)
                )

Hier is onze CREATE TABLE DDL. Behalve de gewijzigde naam en een toegevoegde primaire sleutelbeperking, lijkt deze DDL vrijwel op degene die we in de laatste zelfstudie hebben gemaakt.

Stap 2:Schrijf het PL/SQL-blok voor dynamische uitvoering van het DDL-statement.

Nu we onze CREATE TABLE DDL hebben voorbereid. Laten we het PL/SQL-programma schrijven om het dynamisch uit te voeren.

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2(150);
BEGIN
ddl_qry := 'CREATE TABLE tut_83('||
                'tut_num     NUMBER(3),'||
                'tut_name    VARCHAR2(50)'||
                ')';
EXECUTE IMMEDIATE ddl_qry;
END;
/

Laten we eens kijken wat we in dit programma hebben gedaan.

De sectie Verklaring .

DECLARE
    ddl_qry     VARCHAR2 (150);

In de declaratiesectie van ons PL/SQL-blok hebben we een variabele gedeclareerd met de naam ddl_qry. Deze variabele bevat onze CREATE TABLE DDL die we zullen uitvoeren met de instructie Execute Immediate.

Volgens de laatste tutorial behandelt Execute Immediate alle SQL-statements als een string van het VARCHAR2-gegevenstype. Daarom hadden we onze variabele ddl_qry gedeclareerd als VARCHAR2 datatype.

De uitvoeringssectie.

Direct na de aangiftesectie hebben we onze uitvoeringssectie waar al het plezier gebeurt.

BEGIN
    ddl_qry :=  'CREATE TABLE tut_83 ('||
                    'tut_num     NUMBER (5),'||
                    'tut_name    VARCHAR2 (50),'||
                    'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'||
                ')';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

Deze uitvoeringssectie bestaat uit slechts twee instructies:

  1. Opdrachtverklaring
  2. Directe verklaring uitvoeren

De eerste verklaring die de "Opdrachtverklaring" is, maakt deze code anders dan de vorige. Laten we eens kijken wat deze uitspraken zijn.

Verklaring 1:Opdrachtverklaring.

ddl_qry :=  'CREATE TABLE tut_83 ('||
                    'tut_num     NUMBER (5),'||
                    'tut_name    VARCHAR2 (50),'||
                    'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'||
                ')';

Dit is de enige verklaring die dit PL/SQL-programma anders maakt dan het programma dat we in de vorige tutorial zagen.

In dit statement wijzen we de CREATE TABLE DDL toe aan de variabele ddl_qry. Dus wat is hier anders?

In de vorige methode hebben we onze hele DDL-instructie ingesloten in een paar enkele aanhalingstekens ( ' ' ). Vind dit leuk

ddl_qry:= 'CREATE TABLE tut_82 (
                tut_num     NUMBER(3),
               	tut_name    VARCHAR2 (50)
               )';

Eerste manier om een ​​DDL-query te schrijven

Terwijl hier bij de tweede methode, in plaats van de hele query in de enkele aanhalingstekens te stoppen, we deze eerst in meerdere strings van VARCHAR2 hebben verdeeld. Dit hebben we gedaan door elke regel van de query in enkele aanhalingstekens te plaatsen. Daarna hebben we ze allemaal samengevoegd met behulp van de concatenate-operator ( || ), zodat de PL/SQL-engine ze als een enkele eenheid zal uitvoeren.

In de video-tutorial kun je een gedetailleerde demonstratie van deze doorbraak-aanpak voor dynamische uitvoering bekijken.

Voorgestelde lezing:Concat-functie versus Concat-operator.

Verklaring 2:Voer onmiddellijke verklaring uit.

Ons tweede statement is het Execute Immediate statement. Het voert elke SQL-instructie uit die een enkele rij van het resultaat dynamisch retourneert. In ons geval voert deze instructie een CREATE TABLE DDL-query uit via een PL/SQL-blok.

Er zijn slechts twee manieren om een ​​DDL-instructie uit te voeren via een PL/SQL-blok in Oracle Database. Ofwel met behulp van het DBMS_SQL-pakket of Execute Immediate of Native Dynamic SQL. Lees hier wat u nog meer kunt doen met Execute Immediate.

Om een ​​DDL dynamisch uit te voeren, moet u eerst de gereserveerde zin 'Execute Immediate' schrijven. Gevolgd door de variabelenaam waarin u uw DDL hebt opgeslagen zoals we hierboven hebben gedaan.

Controleer of de tabel is gemaakt of niet.

Er zijn meerdere manieren om te controleren of het PL/SQL-blok de CREATE TABLE DDL met succes heeft uitgevoerd of niet. Maar hier ga ik je de twee gemakkelijkste en populairste manieren laten zien.

DeSCRIBE-opdracht gebruiken

De eenvoudigste manier om te controleren of het PL/SQL-blok de tabel tut_83 met succes heeft gemaakt of niet, is door het DESCRIBE-commando te gebruiken. Het Beschrijf-commando toont de structuur van de genoemde tabel, alleen als deze bestaat, anders wordt een fout geretourneerd.

Laten we dat proberen

DESCRIBE tut_83;
Or 
DESC tut_83

Als u bij het uitvoeren van het bovenstaande beschrijf-commando de structuur van de tabel tut_83 ziet, dan betekent dit dat het bovenstaande PL/SQL-blok de tabel met succes heeft gemaakt. Maar als u een foutmelding krijgt, betekent dit dat u ergens een fout hebt gemaakt en dat de uitvoering van het PL/SQL-blok niet is gelukt.

Het ALL_OBJECTS-datawoordenboek gebruiken.

U kunt ook de datadictionary ALL_OBJECTS opvragen. Dit helpt om erachter te komen of de gewenste tabel of een ander object dat u probeert te maken, is gemaakt of niet. Zoals dit

SELECT 'We created a table with name '||object_name||' in '
        ||owner||' schema on '||created
FROM all_objects WHERE object_name ='TUT_83';

Dit zijn twee van de vele manieren om erachter te komen of het gewenste object met succes is gemaakt.

Nog één ding voordat u deze tutorial afsluit. Lees alstublieft de vorige blog voor een beter begrip hiervan, evenals de komende tutorials.

Dat is de PL/SQL-tutorial over de tweede manier om een ​​CREATE TABLE DDL te schrijven voor het Execute Immediate-statement van Native Dynamic SQL in Oracle Database.

Ik hoop dat je het leuk vond om te lezen. Abonneer je dan zeker op het YouTube-kanaal. Omdat we in de volgende tutorial zullen leren hoe je schema-objecten dynamisch kunt neerzetten en wijzigen.

Bedankt en een fijne dag verder!


  1. Salesforce SOQL gebruiken vanuit Linux

  2. Cursorlusverwerking voortzetten na uitzondering in Oracle

  3. Hoe te bestellen op maandnaam in MySQL

  4. Conversie mislukt bij het converteren van de varchar-waarde 'simple' naar gegevenstype int