2

誰かがそのコードを修正するのを手伝ってくれますか? PL/SQL (SQLPLUS @script.sql) では実行されず、SP2-0552: バインド変数 "NEW" が宣言されていません。

スクリプト.SQL

  prompt Creating Table SYSTEMDATALOG;

declare 
    counter1 integer;
    counter2 integer;

begin
    SELECT COUNT(*) INTO counter1 FROM ALL_TABLES WHERE TABLE_NAME='SYSTEMDATALOG' AND OWNER='MZMESDB';

    if counter1 = 1 then 
        DROP TABLE SYSTEMDATALOG;
    end if;

    SELECT COUNT(*) INTO counter2 FROM ALL_SEQUENCES WHERE SEQUENCE NAME='SEQSYSTEMDATALOG';

    if counter2 = 1 then 
        DROP SEQUENCE SEQSYSTEMDATALOGID;
    endif;

    CREATE TABLE "MZMESDB"."SYSTEMDATALOG" ( "ID" INTEGER NOT NULL , 
                         "DATETIME" DATE NOT NULL , 
                         "TYPE" VARCHAR2(64) NOT NULL, 
                         "SEVERITY" INTEGER NOT NULL,
                         "SOURCE" VARCHAR2(64) NOT NULL, 
                         "USER" VARCHAR2(64) NOT NULL,
                         "MESSAGE" VARCHAR2(1024), PRIMARY KEY ("ID") VALIDATE );


    CREATE SEQUENCE SEQSYSTEMDATALOGID;

    CREATE OR REPLACE TRIGGER TRIGSYSTEMDATALOGID
        BEFORE INSERT ON SYSTEMDATALOG
        FOR EACH ROW
            BEGIN
                SELECT SEQSYSTEMDATALOGID.NEXTVAL INTO :NEW.ID FROM DUAL;
            END TRIGSYSTEMDATALOGID;
end;
/

どんな種類の助けにも感謝します。

[決定的なコード]

プロンプト テーブル SYSTEMDATALOG を作成しています。

counter1 整数を宣言します。counter2 整数;

begin SELECT COUNT(*) INTO counter1 FROM ALL_TABLES WHERE TABLE_NAME='SYSTEMDATALOG' AND OWNER='MZMESDB';

if counter1 = 1 then 
    execute immediate 'DROP TABLE SYSTEMDATALOG';
end if;

SELECT COUNT(*) INTO counter2 FROM ALL_SEQUENCES WHERE SEQUENCE_NAME='SEQSYSTEMDATALOG';

IF counter2 = 1 then
    execute immediate 'DROP SEQUENCE SEQSYSTEMDATALOGID';
END IF;

execute immediate 'CREATE TABLE "MZMESDB"."SYSTEMDATALOG" ( 
                    "ID" INTEGER NOT NULL , 
                    "DATETIME" DATE NOT NULL , 
                    "TYPE" VARCHAR2(64) NOT NULL, 
                    "SEVERITY" INTEGER NOT NULL,
                    "SOURCE" VARCHAR2(64) NOT NULL, 
                    "USER" VARCHAR2(64) NOT NULL,
                    "MESSAGE" VARCHAR2(1024), PRIMARY KEY ("ID") VALIDATE )';

execute immediate 'CREATE SEQUENCE SEQSYSTEMDATALOGID';

execute immediate 'CREATE OR REPLACE TRIGGER TRIGSYSTEMDATALOGID
           BEFORE INSERT ON SYSTEMDATALOG
           FOR EACH ROW
           BEGIN
            SELECT SEQSYSTEMDATALOGID.NEXTVAL INTO :NEW.ID FROM DUAL;
           END TRIGSYSTEMDATALOGID;';

終わり;

4

1 に答える 1