sql >> Database >  >> RDS >> Oracle

ALTER &DROP-tabel DDL met onmiddellijk uitvoeren in Oracle-database

ALTER &DROP Tabel DDL

Vanaf nu hebben we alle mogelijke manieren geleerd om een ​​tabel in een PL/SQL-blok te maken met behulp van Native Dynamic SQL. Je kunt ze bekijken in de laatste twee tutorials, namelijk tutorial 82 en tutorial 83.

Bedankt, Dynamic SQL, dat je ons de kracht geeft om DDL- en DML-statements uit te voeren in ons PL/SQL-blok. Oké, kalmeer allemaal mensen uit het stenen tijdperk! Ik weet dat het DBMS_SQL-pakket er nog steeds is, maar in vergelijking met dynamische SQL vind ik het erg complex, om nog maar te zwijgen van de trage prestaties. Hoe dan ook, dus

Wat leren we van deze tutorial?

In deze tutorial leren we hoe we ALTER &DROP tabel DDL kunnen gebruiken met Execute Immediate statement van Native dynamic SQL. Het betekent dat je aan het einde van deze tutorial in staat bent om een ​​database-object zoals een tabel dynamisch te wijzigen en te verwijderen, rechtstreeks via je PL/SQL-programma.

Waarom zouden we dat moeten leren?

Sommigen vinden het onderwerp misschien irrelevant, maar het is niet zozeer een heel belangrijk onderwerp, vooral vanuit het perspectief van Oracle-certificering en interviews. Als ontwikkelaar moeten we ook allemaal onze basisprincipes duidelijk hebben, want je weet nooit wanneer je het nodig hebt.

Dus laten we beginnen met de tutorial, mocht je nog vragen hebben, stel ze gerust op mijn Facebook, hier. Laten we eerst leren hoe we een tabel kunnen wijzigen met ALTER TABLE met Execute Immediate of Dynamic SQL.

Hoe dynamisch een tabel wijzigen?

Om een ​​database-object zoals een tabel te wijzigen, gebruiken we ALTER DDL in Oracle Database. Het wijzigen van een tabel met ALTER DDL via SQL is eenvoudig in vergelijking met PL/SQL.

PL/SQL ondersteunt niet rechtstreeks DDL-, DML- en DQL-statements. Om de genoemde SQL-statements uit te voeren, moeten we ofwel Dynamic SQL of het DBMS_SQL-pakket gebruiken. Van deze twee is Native Dynamic SQL (NDS) de meest haalbare optie vanwege zijn eenvoud en geoptimaliseerde prestaties. U kunt de voordelen van NDS ten opzichte van het DBMS_SQL-pakket hier lezen.

De eenvoudigste manier om een ​​database-object zoals een tabel dynamisch te wijzigen, is door de Alter Table DDL te gebruiken met de instructie Execute Immediate van Native Dynamic SQL.

Voorbeeld:verander tabel DDL met Execute Immediate statement.

Voor de demonstratie zullen we dezelfde tabel gebruiken die we in de laatste tutorial hebben gemaakt. Daar hebben we een tabel gemaakt met de naam tut_83 met twee kolommen tut_num van het gegevenstype NUMBER en tut_name van het gegevenstype varchar 2.

Als je met mij oefent, moet je die tabel in je schema hebben gemaakt. Als dat zo is, ben je helemaal klaar om te gaan, anders ga je naar de laatste tutorial en maak je die tabel.

Laten we nu zeggen dat we een andere kolom tut_date of date datatype aan deze tabel willen toevoegen en dat ook met behulp van native dynamische SQL. Om dat te doen, moeten we de ALTER TABLE DDL gebruiken met de instructie Execute Immediate.

Stap 1:bereid de DDL-verklaring voor.

De beste methode voor het schrijven van een dynamisch SQL-programma is om vooraf uw SQL-statement voor te bereiden.

ALTER TABLE tut_83 ADD tut_date DATE

Hier is de ALTER TABLE DDL die we zullen gebruiken voor dynamische uitvoering. Deze instructie voegt de kolom tut_date van het gegevenstype DATE toe aan de tabel tut_83.

Je kunt ook de video-tutorial bekijken voor een live demonstratie van het concept.

Stap 2:Schrijf het Native Dynamic SQL-programma.

Zodra je je DDL-statement klaar hebt, ben je helemaal klaar om het PL/SQL-blok te schrijven.

SET SERVEROUTPUT ON;
DECLARE
 ddl_qry VARCHAR2(50);
BEGIN
 ddl_qry := 'ALTER TABLE tut_83
        	 ADD  tut_date DATE';
 EXECUTE IMMEDIATE ddl_qry;
END;
/  

Bij succesvolle uitvoering zal dit PL/SQL-programma de bovengenoemde tabel wijzigen. U kunt de gewijzigde structuur van uw tabel controleren door het DESCRIBE-commando te gebruiken, zoals dit

DESCRIBE tut_83;

OF

DESC tut_83;

Dat is alles wat u hoeft te doen. Dat is hoe we een databaseobject dynamisch wijzigen met behulp van ALTER TABLE DDL met Execute Immediate-statement. Hiermee is ook het eerste deel van de tutorial afgesloten. Laten we nu verder gaan met het tweede en leren hoe je een tabel kunt verwijderen met behulp van native dynamische SQL.

Hoe een tabel dynamisch verwijderen?

Om een ​​database-object zoals een tabel te verwijderen, gebruiken we DROP DDL in Oracle Database. Net als elk ander DDL-statement wordt dit ook niet direct ondersteund door de PL/SQL-engine. En zoals gewoonlijk moeten we Dynamic SQL gebruiken om deze DDL ook uit te voeren. Laten we eens kijken hoe we een tabel kunnen verwijderen met Execute Immediate of Native Dynamic SQL.

Stap 1:bereid de DDL-verklaring voor.

De DDL voor het verwijderen van een tafel is:

DROP TABLE tut_83

Deze DDL verwijdert de tabel tut_83 uit het schema.

Stap 2:Schrijf het PL/SQL-programma voor de DROP-tabel met Execute Immediate.

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2 (100);
BEGIN
    ddl_qry := 'DROP TABLE tut_83';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

Dus een succesvolle uitvoering van dit programma zou de tabel tut_83 moeten laten vallen, die je gemakkelijk kunt controleren met het DESCRIBE-commando zoals hierboven weergegeven.

Dat is de tutorial over het wijzigen en verwijderen van een database-object met behulp van Alter &Drop table DDL met Execute Immediate statement van Native Dynamic SQL in Oracle Database. Ik hoop dat je het leuk vond om te lezen en iets nieuws hebt geleerd. Deel deze blog op je sociale media met je vrienden. Je kunt ook contact met me opnemen op mijn Facebook-pagina voor meer interessante inzichten. Bedankt en een fijne dag verder!


  1. Is het mogelijk om door de gebruiker gedefinieerde aggregaten (clr) te gebruiken met vensterfuncties (over)?

  2. Hoe te voorkomen dat dubbele records in MySQL worden ingevoegd?

  3. 10 tijdbesparende tips voor MS Access-gebruikers

  4. Wat is het verschil tussen Scope_Identity(), Identity(), @@Identity en Ident_Current()?