从 C# 运行 Oracle 存储过程

发布于 2024-07-16 05:24:19 字数 675 浏览 5 评论 0原文

一个初学者的问题: 我在 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();

A beginner question:
I have a stored proc (just a procedure, without any packages) in the Oracle Database:

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

and it works fine in TOAD. However, when I try to run it from C# it complains:

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

relevant C# code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

巴黎盛开的樱花 2024-07-23 05:24:19

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

Check that the Oracle user that your .NET application is connecting with has permissions to execute the stored procedure.

心在旅行 2024-07-23 05:24:19

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

grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;

Found it, the error message was a bit misleading. I was executing it as a different user, who didn't have the proper access rights. This did the trick:

grant execute on FII_DBO.CLEAR_UNIT_TEST_PRODUCT to FII_USER;
枕梦 2024-07-23 05:24:19

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

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

Are you including the package name in the procedureName variable?

i.e. setting procedureName to "FII_DBO.CLEAR_UNIT_TEST_PRODUCT", not just "CLEAR_UNIT_TEST_PRODUCT"?

隔岸观火 2024-07-23 05:24:19

您的过程似乎是在另一个架构中创建的。

出现问题

ALTER SESSION SET CURRENT_SCHEMA = FII_DBO

连接后立即

。 我记得提供商在调用存储过程时存在一些错误。

将您的 CommandText 设置为

BEGIN FII_DBO.CLEAR_UNIT_TEST_PRODUCT(); END;

CommandTypeText

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

fii_dbo.clear_unit_test_product

,我记得案例也很重要。

Your procedure seems to be created in another schema.

Issue

ALTER SESSION SET CURRENT_SCHEMA = FII_DBO

right after connecting.

I recall the provider has some bugs with calling stored procedures.

Set your CommandText to

BEGIN FII_DBO.CLEAR_UNIT_TEST_PRODUCT(); END;

and CommandType to Text

Also you may try to change the case of you stored procedure name, like:

fii_dbo.clear_unit_test_product

, I recall that the case matters too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文