0

Oracle 11g で自動インクリメント トリガーを作成するときに問題が発生します。誰かが私が間違っていることを指摘できれば、本当に感謝しています。シーケンスのスクリプトは次のとおりです。

CREATE SEQUENCE SPSS_QUOTE_LINE_ITEMS_SEQ start with 1
increment by 1
minvalue 1;

トリガーのスクリプト:

CREATE OR REPLACE TRIGGER SPSSQUOTELINEITEMS_ON_INSERT
BEFORE INSERT ON SPSS_QUOTE_LINE_ITEMS
FOR EACH ROW

BEGIN
 SELECT SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL
 INTO   :new.line_num
 FROM   dual;
END;

私が得ているエラー: [コード: 900、SQL 状態: 42000] ORA-00900: 無効な SQL ステートメント

どうもありがとう。

4

1 に答える 1

0

以下のようにトリガーを変更する正しい方法は次のとおりです。

CREATE OR REPLACE TRIGGER SPSSQUOTELINEITEMS_ON_INSERT
BEFORE INSERT ON SPSS_QUOTE_LINE_ITEMS
FOR EACH ROW
BEGIN

 :new.line_num := SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL;
 --No need to write any Select Into statement here.
END;

または、私があなたの道をたどると、次のようになります

CREATE OR REPLACE TRIGGER SPSSQUOTELINEITEMS_ON_INSERT
BEFORE INSERT ON SPSS_QUOTE_LINE_ITEMS
FOR EACH ROW
declare
var number;

BEGIN

SELECT SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL
 INTO   var
 FROM   dual;

 :new.line_num :=var;

END;

通常、トリガーで用語を使用するには、:old を使用して列の古い値を参照し、:new を使用して新しい値を参照します。

于 2016-08-23T07:03:51.143 に答える