2009-03-18 9 views
3

からprocsの保存は初心者質問C#

CREATE OR REPLACE procedure FII_DBO.CLEAR_UNIT_TEST_PRODUCT 
IS 
BEGIN 
... 
END CLEAR_UNIT_TEST_PRODUCT; 

をし、それがヒキガエルで正常に動作します。しかし、私はC#のからそれを実行しようとすると、それは文句:

System.Data.OracleClient.OracleException: ORA-06550: line 1, column 7: 
PLS-00201: identifier 'CLEAR_UNIT_TEST_PRODUCT' must be declared 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

関連するC#コード:

Command = new OracleCommand(); 
Command.CommandText = procedureName; 
Command.CommandType = CommandType.StoredProcedure; 
Command.Connection = connection; 
Command.ExecuteNonQuery(); 

答えて

3

.NETアプリケーションが接続しているOracleユーザーに、ストアドプロシージャを実行する権限があることを確認します。

+0

ええ、それは問題 – Grzenio

+0

@Ianネルソン、@Grzenioた宣言されなければならない - 私は同様の問題を持っています。同じエラーとC#コードは、 'ExecuteReader()'を使用している以外は同じように見えます。接続しているユーザーIDがスキーマの所有者でも特定のプロシージャでもあるため、権限がどのようになっているのかわかりません。これが発生するその他の理由はありますか? –

0

あなたはPROCEDURENAME変数にパッケージ名を含むていますか?

つまり、「CLEAR_UNIT_TEST_PRODUCT」だけでなく、「FII_DBO.CLEAR_UNIT_TEST_PRODUCT」にprocedureNameを設定しますか?

+0

はええ、それだけでなく試してみました:識別子「FII_DBO.CLEAR_UNIT_TEST_PRODUCTは」 – Grzenio

0

手順は別のスキーマで作成されたようです。右の接続後、

問題

ALTER SESSION SET CURRENT_SCHEMA = FII_DBO 

プロバイダがストアドプロシージャを呼び出す際にいくつかのバグを持っていることを思い出してください。

また、あなたは次のように、プロシージャ名を格納しますのケースを変更しようとするかもしれないあなたのCommandText

BEGIN FII_DBO.CLEAR_UNIT_TEST_PRODUCT(); END; 

CommandType

Text

にを設定します:私はあることを思い出し、

fii_dbo.clear_unit_test_product 

事件も重要です。

1

エラーメッセージが見つかりましたが、少し誤解を招いていました。私は適切なアクセス権を持っていない別のユーザーとして実行していました。これはトリックでした:

grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER; 
+1

ええ、エラーメッセージは参考になるものではありませんが、セキュリティ上の理由から考えていると思います。ユーザーがストアドプロシージャにアクセスできない場合、データベースはその存在を認知しません。 –