从C#运行Oracle存储过程

时间:2009-03-18 11:00:03

标签: c# .net oracle ora-06550

初学者问题: 我在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 个答案:

答案 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;

CommandTypeText

您也可以尝试更改存储过程名称的大小写,例如:

fii_dbo.clear_unit_test_product

,我记得案件也很重要。