3

一个初学者问题:我在 Oracle 数据库中有一个存储过程(只是一个过程,没有任何包):

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

它在 TOAD 中运行良好。但是,当我尝试从 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();
4

4 回答 4

3

检查与您的 .NET 应用程序连接的 Oracle 用户是否具有执行存储过程的权限。

于 2009-03-18T11:12:44.770 回答
1

找到了,错误信息有点误导。我以不同的用户身份执行它,他没有适当的访问权限。这成功了:

grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;
于 2009-03-18T11:15:21.970 回答
0

您是否在 procedureName 变量中包含包名称?

即设置procedureName为“ FII_DBO.CLEAR_UNIT_TEST_PRODUCT”,而不仅仅是“ CLEAR_UNIT_TEST_PRODUCT”?

于 2009-03-18T11:07:06.327 回答
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

,我记得案件也很重要。

于 2009-03-18T11:11:36.580 回答