sql >> Databasteknik >  >> RDS >> Oracle

Skapa tabell i procedur

Eftersom vi inte kan skriva DDL-satser direkt i PL/SQL-block, till exempel när vi skriver

CREATE OR REPLACE PROCEDURE TABLERISIKO IS
BEGIN
    drop table risiko;
    CREATE TABLE Risiko
    (
        RNr       INTEGER,
        Projekt       INTEGER,
        Text       VARCHAR(25),
        Gruppe       INTEGER,
        Auswirkung    INTEGER,
        WKeit       INTEGER,
        Pruefdatum    DATE,
        PRIMARY KEY    (RNr),
        CONSTRAINT FKRisiko1 FOREIGN KEY (Projekt)
        REFERENCES Projekt(ProNr),
        CONSTRAINT FKRisiko2 FOREIGN KEY (Gruppe)
        REFERENCES Risikogruppe (RGNr),
        CONSTRAINT PosAuswirkung CHECK(Auswirkung >=0),
        CONSTRAINT WKeitProzent CHECK(WKeit>=0 AND WKeit<=100)
    );
    INSERT INTO Risiko VALUES(1,1,'Anforderungenunklar',1,50000,30 ,TO_DATE('25.01.06','DD.MM.YY'));
    INSERT INTO Risiko VALUES(2,1,'Abnahmeprozess offen',2,30000,70 ,TO_DATE('26.02.06','DD.MM.YY'));
    INSERT INTO Risiko VALUES(3,2,'Ansprechpartner wechseln',1,20000,80 ,TO_DATE('06.05.06','DD.MM.YY'));
    INSERT INTO Risiko VALUES(4,2,'neue Entwicklungsumgebung',3,40000,20 ,TO_DATE('05.10.06','DD.MM.YY'));
END;

Det kommer inte att fungera Men,

CREATE OR REPLACE PROCEDURE TABLERISIKO IS
BEGIN
    execute immediate 'drop table risiko';
    execute immediate 'CREATE TABLE Risiko
    (
        RNr       INTEGER,
        Projekt       INTEGER,
        Text       VARCHAR(25),
        Gruppe       INTEGER,
        Auswirkung    INTEGER,
        WKeit       INTEGER,
        Pruefdatum    DATE,
        PRIMARY KEY    (RNr),
        CONSTRAINT FKRisiko1 FOREIGN KEY (Projekt)
        REFERENCES Projekt(ProNr),
        CONSTRAINT FKRisiko2 FOREIGN KEY (Gruppe)
        REFERENCES Risikogruppe (RGNr),
        CONSTRAINT PosAuswirkung CHECK(Auswirkung >=0),
        CONSTRAINT WKeitProzent CHECK(WKeit>=0 AND WKeit<=100)
    )';
    execute immediate '
        INSERT INTO Risiko VALUES(1,1,||'''||'Anforderungenunklar'||'''||,1,50000,30 ,TO_DATE(||'''||'25.01.06'||'''||,||'''||'DD.MM.YY'||'''||));
        INSERT INTO Risiko VALUES(2,1,||'''||'Abnahmeprozess offen'||'''||,2,30000,70 ,TO_DATE(||'''||'26.02.06'||'''||,||'''||'DD.MM.YY'||'''||));
        INSERT INTO Risiko VALUES(3,2,||'''||'Ansprechpartner wechseln'||'''||,1,20000,80 ,TO_DATE(||'''||'06.05.06'||'''||,||'''||'DD.MM.YY'||'''||));
        INSERT INTO Risiko  VALUES(4,2,||'''||'neue Entwicklungsumgebung'||'''||,3,40000,20 ,TO_DATE(||'''||'05.10.06'||'''||,||'''||'DD.MM.YY'||'''||))';
    commit;
END;

Det kommer att köras framgångsrikt.



  1. Escape sträng Python för MySQL

  2. Det korrekta sättet att implementera en unik begränsning som tillåter flera NULL-värden i SQL Server

  3. InMemory DUBLIKAT Förvirring i Oracle RAC

  4. Hur löser man tvetydiga kolumnnamn när man hämtar resultat?