1
PLSQL関数では、ログ・テーブルにログを書き込むために、プロシージャ(コミット・ステートメントを含む)をコールしています。だから、プロシージャまたは関数を呼び出すと、コミットが含まれている場合、私は、理解して私はORA-14552を取得しますが、私はプラグマAUTONOMOUS_TRANSACTIONのようにそれを手渡していていてもPLSQL:ORA-14552 DDLを実行できません。Commit
CREATE OR REPLACE FUNCTION MYFUNCTION
(--IN PARAMETERS)
BEGIN
---Some select statements
PR_LOGGER(logmessage);
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE tablename';
EXCEPTION WHEN OTHERS
IF (SQLCODE !=942) THEN
PR_LOGGER(SQLERRM);
END IF;
END;
return NULL;
END;
:だから私は
CREATE OR REPLACE PROCEDURE PR_LOGGER
(IN PARAMETERS-----)
IS Pragma Autonomous_transaction
BEGIN
--Insert statements
Commit;
END;
呼び出し元の関数としてそれを宣言しましたそのエラーを避けるために、私はまだ同じエラーを取得しています。どのようなアイデアを私は間違っていますか?お知らせ下さい。
ありがとうございます。自分の機能の中にドロップテーブルを使用しないでください。あなたはそれを行うための最良の方法を助言することができます – Karthik
右。 FUNCTIONのコンテキストでDDL操作を実行しないでください。自律的なトランザクションを使用してコミットを行う方法をすでに理解しています。 DROP TABLEでも同じことができます。これをPROCEDUREに入れ、FUNCTIONからプロシージャーを呼び出します。 – spencer7593
ありがとうございます:)それを試みます – Karthik