これは、権限の問題でしょうか?
教えていただければ助かります。
よろしくお願いします。
『エラー内容』
Oracle Automation:440:SQL実行エラー, ORA-06550: 行1、列8:
PLS-00201: 識別子PK_AAAAAA.P_BBBBBを宣言してください。
ORA-06550: 行1、列8:
PL/SQL: Statement ignored
:PK_AAAAAA.P_BBBBB:::"
環境:
Oracle9i
Window2000
VisualBasic6.0
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_s24.htm
バインド変数を利用してますでしょうか?
利用していたら宣言して設定してあげないとダメかと思います。
PK_AAAAAAはスキーマ名ですか?パッケージ名ですか?
----
PK_AAAAAAがスキーマ名だと仮定して、エラーが考えられるのは、、、
1.PK_AAAAAAのつづりが間違っている
2.P_BBBBBのつづりが間違っている
3.VBで接続しているスキーマからP_BBBBBに実行権限がない
権限付与は、SQL*PlusなどでPK_AAAAAAに接続して、
grant execute on PK_AAAAAA to XXXXX
(XXXXXはVBで接続しているスキーマ)
----
PK_AAAAAAがパッケージ名だと仮定して、エラーが考えられるのは、、、
1.P_BBBBBのつづりが間違っている
2.PK_AAAAAAがVBで接続しているスキーマとは別のスキーマにある
・外部スキーマパッケージの呼び出しは、
例えば、
begin SCOTT.PK_AAAAAA.P_BBBBB; end;
3.パッケージ仕様が作成されてない
・パッケージは仕様と本体の2つが必要
CREATE PACKAGE PK_AAAAAA
CREATE PACKAGE BODY PK_AAAAAA
PK_AAAAAAはパッケージ名です。
おそらく、権限の問題でエラーが発生している問い思います。
VBからはSCOTTユーザでアクセスしております。
>PK_AAAAAAはパッケージ名です。
>VBからはSCOTTユーザでアクセスしております。
VBでSCOTTにアクセスして、SCOTT上のパッケージを呼び出そうとしているのですね。
その状態で「宣言してください」とエラーになるのは、パッケージ仕様にプロシージャの宣言がないからだと思われます。
パッケージ仕様はこんな感じで、
CREATE OR REPLACE PACKAGE PK_AAAAAA IS PROCEDURE P_BBBBB(arg1 IN NUMBER, ....); END; /
ご回答ありがとうございます。
上記の返信は、返信文を記載途中に送信してしまい。中途半端になってしまいました。すみません。
・VBからはSCOTTでアクセスしています。
・パッケージは、SYSに登録されています。
・プロシージャの宣言はしております。
実行ユーザにExecute権限をつけなさいと書いているページがあるのですが、この場合、SCOTTユーザのロールにEXECUTE_CATALOG_ROLE権限、システム権限に、EXECUTE ANY といつくものを累加させるということで大丈夫でしょうか?
>・パッケージは、SYSに登録されています。
sysに最初からある既存のパッケージでしょうか?
それでしたら、EXECUTE_CATALOG_ROLEロールがあれば大概のものは実行できます。
SCOTTにEXECUTE_CATALOG_ROLEを付与してください。
(sysに接続して、)
grant EXECUTE_CATALOG_ROLE to scott
----
sysに自前のプロシージャを登録してそれを実行したいのであれば、オブジェクト権限を付与してください。
(sysに接続して、)
grant execute on sys.PK_AAAAAA to SCOTT
----
どちらにせよ、VBからの呼び出しでスキーマ名を指定してください。
(ただし、既存パッケージのほとんどはパブリックシノニムがあり、スキーマ名を書かなくても実行できる)
begin sys.PK_AAAAAA.P_BBBBB; end;
----
>SCOTTユーザのロールにEXECUTE_CATALOG_ROLE権限、システム権限に、EXECUTE ANY といつくものを累加させるということで大丈夫でしょうか?
複数のロールやシステム権限やオブジェクト権限を累積させることは可能で、問題ありません。
ご回答ありがとうございました。