VBからPL/SQLを実行する際に以下のエラーが発生します。

これは、権限の問題でしょうか?
教えていただければ助かります。
よろしくお願いします。

『エラー内容』
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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/04/29 16:50:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント23pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_s24.htm

バインド変数を利用してますでしょうか?

利用していたら宣言して設定してあげないとダメかと思います。

id:hate_na012345

ご回答ありがとうございました。

2007/04/23 14:09:24
id:mj99 No.2

回答回数138ベストアンサー獲得回数38

ポイント23pt

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

id:hate_na012345

PK_AAAAAAはパッケージ名です。

おそらく、権限の問題でエラーが発生している問い思います。

VBからはSCOTTユーザでアクセスしております。

2007/04/24 18:21:50
id:mj99 No.3

回答回数138ベストアンサー獲得回数38

ポイント22pt

>PK_AAAAAAはパッケージ名です。

>VBからはSCOTTユーザでアクセスしております。


VBでSCOTTにアクセスして、SCOTT上のパッケージを呼び出そうとしているのですね。

その状態で「宣言してください」とエラーになるのは、パッケージ仕様にプロシージャの宣言がないからだと思われます。

パッケージ仕様はこんな感じで、

CREATE OR REPLACE PACKAGE PK_AAAAAA
IS
  PROCEDURE P_BBBBB(arg1 IN NUMBER, ....);
END;
/
id:hate_na012345

ご回答ありがとうございます。

上記の返信は、返信文を記載途中に送信してしまい。中途半端になってしまいました。すみません。

・VBからはSCOTTでアクセスしています。

・パッケージは、SYSに登録されています。

・プロシージャの宣言はしております。

実行ユーザにExecute権限をつけなさいと書いているページがあるのですが、この場合、SCOTTユーザのロールにEXECUTE_CATALOG_ROLE権限、システム権限に、EXECUTE ANY といつくものを累加させるということで大丈夫でしょうか?

2007/04/25 08:44:06
id:mj99 No.4

回答回数138ベストアンサー獲得回数38

ポイント22pt

>・パッケージは、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 といつくものを累加させるということで大丈夫でしょうか?

複数のロールやシステム権限やオブジェクト権限を累積させることは可能で、問題ありません。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません