既存のファンクションを利用して、PL/SQLでスクリプトを作成しているのですが
下記のエラーが発生します。
PLS-00201: 識別子xxxx.aaaaを宣言してください。
PLS-00201: 識別子xxxx.bbbbを宣言してください。
※ xxxx:パッケージ名, aaaa, bbbb:ファンクション名 です
ファンクションはパッケージ化されており、同パッケージ内のプロシージャは実行可能です。
CREATE PACKAGE と CREATE PACKAGE BODYの定義は下記の通りです。(xxx:スキーマ名です)
PL/SQL
1--ファイル1.sql(CREATE PACKAGE) 2create or replace package xxx.xxxx as 3 4TYPE TABChar is Table of VARCHAR2(1000) INDEX BY BINARY_INTEGER; 5 6(略) 7FUNCTION aaaa(aaa IN VARCHAR2) RETURN TABChar; 8(略) 9 10end xxxx; 11/
PL/SQL
1--ファイル2.sql(CREATE PACKAGE BODY) 2create or replace package body xxx.xxxx 3as 4 5FUNCTION bbbb(bbb OUT VARCHAR2) RETURN BOOLEAN 6IS 7 (略) 8BEGIN 9 (略) 10EXCEPTION 11 (略) 12 RETURN FALSE; 13END; 14 15FUNCTION aaaaa(aaa IN VARCHAR2) RETURN TABChar 16IS 17 (略) 18BEGIN 19 (略) 20 RETURN XXXX; 21EXCEPTION 22 (略) 23END; 24 25end xxxx; 26/ 27SHOW ERROR
原因を権限不足と仮定して対処してみましたが、下記の通りの結果です。
- 実行ユーザにファンクション実行権限を付与(grant execute on xxxx.aaaa to USER;)
→__ORA-04042: プロシージャ、ファンクション、パッケージ、パッケージ本体が存在しません。__
下記のとおり他にも確認してみましたが、いずれも実行不可でした。
- スペルを確認して実行
- ファンクション名の記載は、大文字/小文字ともに実行
- スキーマを指定して実行
- パッケージ所有ユーザで実行
同一パッケージでも、プロシージャは実行可、ファンクションは実行不可ということはあるのでしょうか?
また、他に原因として考えられることがありましたらご教示いただけますでしょうか。
Oracleのバージョンは11gです。
よろしくお願い致します。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。