0

reportnumとサフィックスを更新し、ColdfusionORMと互換性を持たせるためのトリガーを取得しようとしています。これを単一のキーを持つテーブルで機能させるために、以下の例の最初の部分を使用しました。この表では、レポート番号が指定されている場合、サフィックスを次の値に更新する必要があります。

CREATE TABLE tb1 ( reportnum NUMBER, suffix NUMBER );

CREATE SEQUENCE seq1 START WITH 1;

CREATE OR REPLACE TRIGGER "TRG1_TB1" BEFORE INSERT ON
tb1 FOR EACH ROW
BEGIN
    IF :NEW.reportnum IS NULL  THEN
        SELECT seq1.NEXTVAL INTO :NEW.reportnum FROM dual;

    ELSIF :NEW.REPORTNUM = ''  THEN
        SELECT seq1.NEXTVAL INTO :NEW.reportnum FROM dual;

    ELSIF :NEW.suffix = '' THEN
        SELECT MAX(suffix)+1 INTO :NEW.suffix FROM tb1 WHERE reportnum = :NEW.reportnum

    ELSIF :NEW.suffix = NULL THEN
        SELECT MAX(suffix)+1 INTO :NEW.suffix FROM tb1 WHERE reportnum = :NEW.reportnum

    END IF; 
END;

私が得ているエラーは、彼らのコマンドが適切に終了していないということです。

4

2 に答える 2

1

;サフィックスクエリの最後に追加します

 ELSIF :NEW.suffix = '' THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix 
    FROM tb1 WHERE reportnum = :NEW.reportnum;

ELSIF :NEW.suffix = NULL THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix 
    FROM tb1 WHERE reportnum = :NEW.reportnum;

これを行うことで、両方のifステートメントの数を減らすこともできます。次に例を示します。

 IF coalesce(:NEW.reportnum,-1) = -1  THEN
    SELECT seq1.NEXTVAL INTO :NEW.reportnum FROM dual;  

ELSIF coalesce(:NEW.suffix,-1) = -1 THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix 
    FROM tb1 WHERE reportnum = :NEW.reportnum;
END IF; 
于 2013-03-26T20:59:57.643 に答える
0

Oracle PL / SQLトリガー・エラーは発生しません。これは構文エラーです。これを試して:

CREATE TABLE tb1(reportnum NUMBER、サフィックスNUMBER);

CREATE SEQUENCE seq1 START WITH 1;

トリガー「TRG1_TB1」を作成または置換してから、各行のtb1に挿入します。開始IF:NEW.reportnumがNULLの場合、seq1.NEXTVAL INTO:NEW.reportnumFROMdualを選択します。

ELSIF :NEW.suffix is NULL THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix FROM tb1 WHERE reportnum = :NEW.reportnum;

END IF;

終わり;

于 2013-03-31T18:03:12.040 に答える