我一直在努力与一个Oracle数据库的呼叫超过一天了。我必须比编程其它数据库不能访问,虽然DBA能够给我下面的:如何解决这个“PLS-00306:错误的数量或参数类型的调用...”
desc appowner.member_data_package
PROCEDURE UPDATE_NOTES_V001
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
TAU_UID_IN VARCHAR2 IN
INCOMING_FUNC_IN VARCHAR2 IN
INCOMING_TEXT_IN VARCHAR2 IN
SYS_SOURCE_IN VARCHAR2 IN
USER_ID_IN VARCHAR2 IN
O_STATUS VARCHAR2 OUT
我的代码如下所示:
using (var connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand command = new OracleCommand
{
Connection = connection,
CommandType = CommandType.StoredProcedure,
CommandText = "appowner.MEMBER_DATA_PACKAGE.UPDATE_NOTES_V001",
BindByName = true
};
command.Parameters.Add(new OracleParameter("O_STATUS", OracleDbType.Varchar2, ParameterDirection.ReturnValue));
command.Parameters.Add(new OracleParameter("TAU_UID_IN", OracleDbType.Varchar2, ParameterDirection.Input)).Value = "7400";
command.Parameters.Add(new OracleParameter("INCOMING_FUNC_IN", OracleDbType.Varchar2, ParameterDirection.Input)).Value = "PROVCOUNT";
command.Parameters.Add(new OracleParameter("INCOMING_TEXT_IN", OracleDbType.Varchar2, ParameterDirection.Input)).Value = "Pypestream testing.";
command.Parameters.Add(new OracleParameter("SYS_SOURCE_IN", OracleDbType.Varchar2, ParameterDirection.Input)).Value = "CRM";
command.Parameters.Add(new OracleParameter("USER_ID_IN", OracleDbType.Varchar2, ParameterDirection.Input)).Value = "jac";
command.ExecuteNonQuery();
Console.WriteLine($"Insert output value is '{command.Parameters["O_STATUS"].Value.ToString()}'");
}
当我运行此我得到的错误是:
ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'UPDATE_NOTES_V001'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
至于我可以告诉我做有正确的数量和类型的参数,但如果有人比我更聪明,在O3方式racle(基本上就是任何人)都可以指出我搞砸的地方,那真是太棒了。
如果这部分看起来正确,错误是某种红鲱鱼,我还能看到什么?有没有其他的方式来调用这个过程?请记住,除Visual Studio 2017之外,我没有工具。我无法下载任何有用的扩展。除了发送给DBA的电子邮件外,我没有直接访问数据库的权限。
我也承认我可能在这里完全错误的粘性。我完全猜测,将值插入到Oracle数据库中的代码看起来像是基于我在此处和“网络”中看到的一些示例。任何建议来解决这个问题都会有所帮助。
如果您在Oracle中传递参数,则需要按照在Oracle存储过程中声明的确切顺序传递它们。或将此'ParameterDirection.ReturnValue'更改为'ParameterDirection.OutPut'可以显示确切的Sql语句。 – MethodMan
可以显示完整的过程以及SQL在哪里指定要返回的值..在执行INSERT时,期望在Oracle编号中返回值类型为INT,而INT不同,一个被转换为小数,而另一个是INTEGER ...我已经修复了类似的问题,实际上是昨晚 – MethodMan
不幸的是,我不能显示步骤。从字面上看,我所要做的就是我上面提供的desc。 @MethodMan,我会认为proc会返回除varchar2之外的其他东西,但除非desc以某种方式不准确,否则它似乎是文本。 –