PLS-00231: 関数’string’はSQLでは使用できません。が罠過ぎる件について
ごりごりとSQLを書いているときにふと詰まったのでめも。
Oracle 10g のPL/SQLで以下のようなコードを書いたら
コンパイルエラーになった。
どうやらOracleのFUNCTIONはPACKAGE内に記述しても
プライベートな処理として呼び出せないみたい。。。
CREATE OR REPLACE PACKAGE BODY PACK_TEST IS FUNCTION FOO( IN_STR IN VARCHAR2) RETURN VARHCAR2; IS BEGIN --DO SOMETHING END FOO; PROCEDURE MAIN() IS BEGIN INSERT INTO W_TABLE SELECT 'ITS INVALID CODE' ,FOO('HOGE') FROM DUAL; END MAIN; END PACK_TEST;
こんな感じでエラーになる
PLS-00231: 関数FOOはSQLでは使用できません。
パッケージのヘッダにFOOの宣言をすれば幸福が実現する。
エラーメッセージから解決方法から1ミリも思いつかないよね...。
CREATE OR REPLACE PACKAGE PACK_TEST IS FUNCTION FOO( IN_STR IN VARCHAR2) RETURN VARCHAR2; PROCEDURE MAIN();
ちなみにここには
処置: SQL文から関数コールを削除してください。または、関数コールをローカル変数に置き換えてください。
とあるばかりでこれまた何の解決にもならない切ない状態である。