前提・実現したいこと
お世話になっております。
Oracleのtriggerを使用して、同じスキーマ内のfunctionの呼び出しに難儀しております。
triggerから同じスキーマ内のOUT引数を持つfunctionの呼び出しで、実行時エラーが発生しております。
DB:oracle12c
発生している問題・エラーメッセージ
SQL Developer のエラーメッセージ EXCEPTION_ORA_6572 【エラー内容】 ORA-06572: ファンクションstringに出力引数が指定されています 原因: SQL文が、引数リストにOUTパラメータが含まれているパッケージ化されたPL/SQLファンクションまたはスタンドアロンPL/SQLファンクションのどちらかを参照しています。SQL文によって参照されるPL/SQLファンクションには、OUTパラメータが含まれていてはいけません。 処置: 引数リストでOUTパラメータを使用せずに、PL/SQLファンクションを再作成してください。
該当のソースコード
PL/SQL
1--トリガー作成 2CREATE OR REPLACE TRIGGER TEST_TRIGGER 3AFTER INSERT OR DELETE OR UPDATE 4ON TEST_TABLE_A 5REFERENCING OLD AS OLD NEW AS NEW 6FOR EACH ROW 7DECLARE 8 vRET_SQLERR_CD NUMBER; 9 vRET_SQLERR_MSG VARCHAR2(500); 10BEGIN 11 IF INSERTING THEN 12 INSERT INTO TEST_TABLE_B VALUES (FNC_GET_NEXTVAL('KANRI_ID',vRET_SQLERR_CD,vRET_SQLERR_MSG), :NEW.FIELD_A, :NEW.FIELD_B); 13 END IF; 14END; 15/ 16 17-- 更新元テーブル 18CREATE TABLE TEST_TABLE_A( 19 KANRI_NO NUMBER, 20 FIELD_A VARCHAR2(10), 21 FIELD_B VARCHAR2(10) 22); 23 24-- 更新先テーブル 25CREATE TABLE TEST_TABLE_B( 26 KANRI_NO NUMBER, 27 FIELD_A VARCHAR2(10), 28 FIELD_B VARCHAR2(10) 29); 30 31-- ファンクション作成 32CREATE OR REPLACE FUNCTION FNC_GET_NEXTVAL ( 33 ------------------------------------------------------------ 34 -- 次管理番号取得用 35 -- IN : KANRI_ID 管理番号ID 36 -- OUT : RET_SQLERR_CD SQLエラーコード 37 -- RET_SQLERR_MSG SQLエラーメッセージ 38 -- RETURN 39 -- 次管理番号 40 -- ※エラー発生の場合、-1を返す 41 ------------------------------------------------------------ 42 KANRI_ID IN VARCHAR2, 43 RET_SQLERR_CD OUT NUMBER, 44 RET_SQLERR_MSG OUT VARCHAR2 45) RETURN NUMBER IS 46 v_nextval NUMBER := -1; 47 v_SQL VARCHAR2(200); 48 v_KANRI_ID VARCHAR2(30); 49BEGIN 50 -- 次管理番号取得処理を実行 51 RETURN v_nextval; 52EXCEPTION 53 -- エラー発生 54 RET_SQLERR_CD := SQLCODE; 55 RET_SQLERR_MSG := SQLERRM; 56 57 RETURN -1; 58END; 59/ 60
試したこと
OUT引数に nullや0 を設定しましたが、結果は変わりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー