2012-01-23 9 views
1

オラクルデータベース(バージョン11g xe)にデータを挿入しようとしていますが、Toadを使用してプロシージャを実行しようとしたときにエラーが発生しました。 'ORA-01403:何もデータが見つかりませんでした'。 は、ここで私は、私は、テーブル内workdetailsidの自動インクリメントのトリガとシーケンスを定義しオラクルのデータが見つかりません

シーケンスをworkdetailsまし以下statememtまた

EXEC sp_Insert_WorkDetails('test','test'); 

を使用してプロシージャを実行しようとした

CREATE OR REPLACE PROCEDURE ACTSINFO.sp_Insert_WorkDetails 
(p_workname IN varchar , 
p_workaddress IN varchar) 
IS 
BEGIN 
    insert into workdetails (workname,workaddress) values (p_workname,p_workaddress); 
END sp_Insert_WorkDetails; 

私のコードです

ALTER SEQUENCE ACTSINFO.WORKDETAILS_WORKID_SEQ 
INCREMENT BY 1 
MINVALUE 0 
MAXVALUE 9999999999999999999999999999 
NOCACHE 
NOCYCLE 
NOORDER 

T選択をworkdetailsに行がない場合は

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS; 

:私は私を助けるoracle.Plsに新たなんだ

DROP TRIGGER ACTSINFO.WORKDETAILS_INSERT; 
CREATE OR REPLACE TRIGGER ACTSINFO.WORKDETAILS_INSERT 
BEFORE INSERT 
ON ACTSINFO.WORKDETAILS 
REFERENCING NEW AS New OLD AS Old 
FOR EACH ROW 
BEGIN 
    SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS; 
END; 

...

+0

を、その表に定義された 'TRIGGER'、私ドンがない限りこの例外がどのようにスローされるのかは分かりません。それを確認できますか?例外のためにスタックトレースを取得しますか? –

+0

はい、私はworkdetails内のworkdetailsidのオートインクリメントのトリガーを定義しました – ksg

答えて

7

を次のようにリガーはあなたのトリガが問題です何も返されません。さらに悪いことに、workdetailsテーブルに複数の行がある場合、これもまた悲惨に失敗します。

あなたは本当に、次をしたい:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM dual; 

か - あなたは11グラムである場合 - あなたが使用することができます。

:NEW.WORKID := WORKDETAILS_WORKID_SEQ.NEXTVAL; 
+0

最後の行はOracle11以降でのみ動作します。 –

+0

@ RobvanWijk:ありがとう。私は新しい私の現在のバージョンで働いていたが、これがいつ追加されたのか分からなかった。 –

+0

あなたはトリガで二重に何を意味するのかを説明することができます。それはどんな種類のキーワードですか?遅い応答のために申し訳ありません... – ksg

関連する問題