sql >> Database teknologi >  >> RDS >> Oracle

Sådan køres Opret tabel DDL med UDFØR STRAKS i Oracle-databasen

Opret tabel DDL med Execute Immediate

Du tænker sikkert, at hvad kunne være problemet med at udføre en CREATE TABLE DDL? Okay, ingen problemer, så længe du udfører dem med SQL. Men når det kommer til at udføre dem med PL/SQL, så er det lidt svært.

Så først, hvad er DDL-sætninger i Oracle Database?

DDL står for Data Definition Language. Ved hjælp af DDL-sætninger kan vi oprette eller ændre databaseobjekterne såvel som skemaerne. Disse udsagn er:

  • OPRET,
  • SLIP og
  • ÆNDRING.

Det er altid en god praksis at layoute dine skemaer og objekter på forhånd og oprette dem i den indledende fase af dit projekt. Hvis det er muligt, bør vi udføre dette arbejde ved hjælp af SQL. Det kunne være meget hurtigere og meget renere. Men nogle gange er det ikke altid muligt, i den situation kan vi tage hjælp af funktioner som Native Dynamic SQL i Oracle Database.

Native Dynamic SQL gør det muligt for os at udføre SQL-sætninger som DDL eller DML direkte gennem vores PL/SQL.

Hvorfor kan vi ikke udføre DDL gennem et PL/SQL-program?

Hvis du stadig spekulerer på, om det er så kompliceret at udføre DDL-sætning med PL/SQL, så lad os prøve at oprette en tabel gennem et PL/SQL-program.

SET SERVEROUTPUT ON;
BEGIN 
    CREATE TABLE tut_82 (
    tut_num NUMBER(3),
    tut_name   VARCHAR2 (50));  
END;
/

Jeg ved, at denne tilgang ville have været din første tanke, hvis jeg havde bedt dig om at oprette en tabel gennem et PL/SQL-program. Jeg mener, det her ser perfekt ud, hvad kunne gå galt?

Der er ikke noget galt med dette program, det eneste problem her er, at PL/SQL ikke direkte understøtter DDL-sætninger. For at udføre en DDL-sætning ved hjælp af PL/SQL skal vi enten tage hjælp af DBMS_SQL-pakken eller den avancerede og forbedrede måde med NATIVE DYNAMIC SQL.

Du kan selv tjekke dette ud. Gå videre og kør ovenstående program. Ved udførelse vil du få en fejl, som ligner den, der er vist på billedet nedenfor.

Så hvad er den rigtige måde at udføre et DDL gennem PL/SQL-program på?

Du kan udføre et DDL gennem PL/SQL-program enten ved at bruge DBMS_SQL-pakken eller ved at bruge Execute Immediate-sætningen af ​​Native Dynamic SQL. Sidstnævnte mulighed er den mest brugte, især nu om dage på grund af dens bedre ydeevne og let at lære syntaks.

Hvordan udføres CREATE TABLE DDL ved hjælp af Execute Immediate i Oracle Database?

Trin 1:Forbered din DDL på forhånd.

Selvom det ikke er nødvendigt, men jeg foreslår, at du forbereder din DDL på forhånd, på den måde kan du i det mindste eliminere chancerne for at få syntaktiske fejl på grund af syntaksen i din DDL-sætning.

I vores tilfælde ønsker vi at udføre en CREATE TABLE DDL, så lad os først skrive en DDL til oprettelse af en tabel.

CREATE TABLE tut_82 (
    tut_num    NUMBER (3),
    tut_name   VARCHAR2 (50)
) 

Denne DDL-sætning vil oprette en tabel med navnet tut_82 med to kolonner tut_num af NUMBER datatype og tut_name af VARCHAR2 datatype.

Husk, lad være med at afslutte din SQL-sætning (den du vil køre med EXECUTE IMMEDIATE) med et semikolon.

Trin 2:Kør dit DDL gennem PL/SQL-program ved hjælp af Execute Immediate.

Når du har forberedt din DDL næste gang, skal du skrive dit PL/SQL-program.

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

I ovenstående PL/SQL-blok erklærede vi en variabel med navnet ddl_qry. Vi brugte denne variabel til at holde vores DDL-sætning, som vi forberedte i trin 1.

Oplysninger:
En ting, du skal sikre dig her, er, at den variabel, du vil bruge til at holde SQL-sætningen, som du vil køre med din EXECUTE IMMEDIATE-sætning altid skal være af VARCHAR2-datatypen og har masser af databredde så din DDL nemt kunne passe ind i den.

I udførelsessektionen af ​​denne PL/SQL-blok har vi to eksekverbare sætninger. Disse udsagn er:

Udsagn 1:Opgaveerklæring

I den første sætning har vi gemt vores Create Table DDL i variablen ddl_qry ved hjælp af tildelingsoperatoren (I PL/SQL er tildelingsoperatoren kombinationen af ​​koloner og lig med fortegn).

Erklæring 2:The Mighty Execute Immediate-erklæring

Den anden erklæring er Udfør erklæringen. For at eksekvere en DDL dynamisk, skal du først skrive den reserverede sætning 'Execute Immediate' efterfulgt af variabelnavnet, som du har gemt din DDL i, som vi gjorde ovenfor.

Hvis du vil, kan du også skrive din DDL direkte efter sætningen 'Reserveret sætning'. Det er fuldstændig et personligt valg. Jeg kan godt lide at bruge den tidligere tilgang, hvor vi bruger Variable til at holde DDL, fordi det først og fremmest får din kode til at se pæn og ren ud, og det gør også fejlsporingen meget nemmere.

Men Manish, jeg vil også gerne lære den anden måde at skrive DDL-sætningen på.

Selvfølgelig er der intet galt i at lære noget nyt.

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tut_82(
                	tut_num     NUMBER(3),
                	tut_name    VARCHAR2(50)
                )';
END;
/

Den alternative tilgang til ovenstående kode er at skrive DDL-sætningen direkte i din Execute Immediate-sætning. Til dette skal du bare først skrive den reserverede sætning Execute Immediate efterfulgt af DDL-sætningen, som du ønsker at udføre dynamisk.

På begge måder skal du bare tage dig af et par ting, mens du skriver DDL til Execute Immediate.

For det første:Indsæt altid din SQL-sætning i et par enkelte anførselstegn

Husk altid, at Execute Immediate behandler DDL eller DML eller andre understøttede SQL-sætninger, som du ønsker at udføre dynamisk som en streng af VARCHAR2-datatypen og i PL/SQL omslutter vi ethvert tegn eller VARCHAR2-streng i et par enkelte anførselstegn. Sørg derfor altid for at omslutte din SQL-sætning, som du ønsker at køre med Execute Immediate i et par enkelte anførselstegn.

For det andet:Pas på semikolon.

I tilfælde af at du skriver en SQL-sætning til Execute Immediate, skal du sætte semikolon (;) lige uden for de enkelte anførselstegn, som du indeholdt din SQL-sætning i. På den anden side, hvis du skriver en PL/SQL-blok til dynamisk udførelse ved hjælp af Execute Immediate, skal du sætte semikolon i slutningen af ​​din PL/SQL-blok lige før det afsluttende enkelt citat såvel som lige uden for de afsluttende enkelte citater.

Det er den detaljerede vejledning om, hvordan man kører Create Table DDL-sætning ved hjælp af EXECUTE IMMEDIATE-sætning af Native Dynamic SQL i Oracle Database. Håber du nød det og lærte noget nyt.

Sørg for at abonnere på min YouTube-kanal, da vi i den næste tutorial vil lære noget nyt og interessant om Dynamic SQL. Du kan også følge mig på min Twitter og Facebook.

Tak og god dag!


  1. Brug af MariaDB Flashback på en MySQL-server

  2. Datatypepræference i SQL Server

  3. SQL Self Join

  4. Nulstil PostgreSQL primærnøgle til 1