初学者问题: 我在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();
答案 0 :(得分:3)
检查您的.NET应用程序所连接的Oracle用户是否有权执行存储过程。
答案 1 :(得分:1)
发现它,错误消息有点误导。我正在以不同的用户身份执行它,他没有适当的访问权限。这就是诀窍:
grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;
答案 2 :(得分:0)
您是否在procedureName变量中包含了包名?
即。将procedureName设置为“FII_DBO.CLEAR_UNIT_TEST_PRODUCT
”,而不只是“CLEAR_UNIT_TEST_PRODUCT
”?
答案 3 :(得分: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
,我记得案件也很重要。