C# 从C运行Oracle存储过程#
初级问题: 我在Oracle数据库中有一个存储过程(只是一个过程,没有任何包):C# 从C运行Oracle存储过程#,c#,.net,oracle,ora-06550,C#,.net,Oracle,Ora 06550,初级问题: 我在Oracle数据库中有一个存储过程(只是一个过程,没有任何包): 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
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#代码:
是否在procedureName变量中包含包名
i、 e.将过程重命名为“
FII\u DBO.CLEAR\u UNIT\u TEST\u PRODUCT
”,而不仅仅是“CLEAR\u UNIT\u TEST\u PRODUCT
”?您的过程似乎是在另一个模式中创建的
发行
就在连接之后
我记得提供者在调用存储过程时有一些bug
将命令文本设置为
BEGIN FII_DBO.CLEAR_UNIT_TEST_PRODUCT(); END;
和CommandType
到Text
您还可以尝试更改存储过程名称的大小写,如:
fii_dbo.clear_unit_test_product
,我记得这个案例也很重要。请检查您的.NET应用程序所连接的Oracle用户是否具有执行存储过程的权限。找到它,错误消息有点误导。我是以另一个没有适当访问权限的用户的身份执行它的。这就成功了:
grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;
是的,也试过了:标识符'FII_DBO.CLEAR_UNIT_TEST_PRODUCT'必须声明是的,错误消息没有什么帮助,但我想这样做是出于安全目的。如果用户不能访问存储过程,那么数据库甚至不会承认它的存在。@Ian Nelson,@Grzenio-我也有类似的问题。除了我使用的是ExecuteReader()
之外,相同的错误和C代码看起来几乎相同。我不明白这怎么可能是权限,因为我连接的用户ID也是模式和特定过程的所有者。可能发生这种情况的任何其他原因?
fii_dbo.clear_unit_test_product
grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;