C# 为什么可以';我不能执行存储过程吗?(捕捉到OracleException)

C# 为什么可以';我不能执行存储过程吗?(捕捉到OracleException),c#,oracle,stored-procedures,ora-06550,C#,Oracle,Stored Procedures,Ora 06550,这是连接到Oracle数据库的代码。它在最后一行失败:dbDataAdapter.Fill(dtResult) 错误为“OracleException已捕获: ORA-06550: line 1, column 7: PLS-00201: identifier 'RESETUNFINISHEDJOBS' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored 我可以通过Oracle SQL*Plus访问数据

这是连接到Oracle数据库的代码。它在最后一行失败:dbDataAdapter.Fill(dtResult)

错误为“OracleException已捕获:

ORA-06550: line 1, column 7:
PLS-00201: identifier 'RESETUNFINISHEDJOBS' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我可以通过Oracle SQL*Plus访问数据库。为什么会出现此错误?是数据库端缺少存储过程还是我的代码?有没有解决方法?

您可能需要在commandtext中定义
schema.package.storedprocedure
(或
schema.table

而不是:

select * from table
使用:

…这同样适用于函数/存储过程

如果commandText仅包含存储过程:

storedprocedurename
尝试:


此外,您可能希望使用公共同义词。通常为对象创建公共同义词的方法比显式使用所有者/架构方法更好。这些对象的用户不必担心使用这种方法的schema.someObject表示法。

SQL代码如何?至少直到第1行第7列或第7列异常为止==>OracleExceptionPublic同义词可能会使使用同一数据库处理多个应用程序变得困难,因为在公共名称空间中可能会发生冲突。我希望应用程序保留其自己的模式,并且调用应用程序知道其模式名,而不是污染公共名称空间。假设在生产数据库环境中有任何适当级别的变更控制(即,开发人员自己不创建/替换同义词),同义词不会污染任何东西。它们在各种情况下都有帮助,但当然不是完全必要的。问题是,一个应用程序上的开发人员可能会创建一个名为ADDRESSES的表,而不知道另一个应用程序上的开发人员正在做完全相同的事情。或者更糟的是,这些应用程序可能是第三方,而您不知道控制任何源。最好使用私有同义词和ALTER SESSION SET CURRENT_SCHEMA
select * from schema.table
storedprocedurename
schema.package.storedprocedurename