gpt4 book ai didi

c# - 存储过程调用给出错误 PLS-00306 ORA-06550

转载 作者:行者123 更新时间:2023-12-02 01:15:21 25 4
gpt4 key购买 nike

我在 Oracle 中有一个存储过程,它有一些参数,我从 C#(http 处理程序)调用它,有时会遇到异常。

PLS-00306: wrong number or types of arguments in call to 'PROC_ADD_...'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我知道错误的数字或类型的含义。这意味着我没有在过程调用的所有参数中提供值。

我的问题是,我在每个参数值中都使用了 string.trim() 函数,如下所示

所以它应该给出错误或object reference 否则我哪里错了。

var prm = new OracleParameter[8];
prm[0] = Command.Parameters.Add(new OracleParameter("IP_ACTION", OracleType.VarChar, 20));
prm[0].Value = pobjCustomerProps.Action.Trim();
prm[1] = Command.Parameters.Add(new OracleParameter("IOP_CUSTOMER_UID", OracleType.VarChar, 30));
prm[1].Direction = ParameterDirection.InputOutput;
prm[1].Value = pobjCustomerProps.CustomerID.Trim();

prm[2] = Command.Parameters.Add(new OracleParameter("IP_MOBILE_NO", OracleType.VarChar, 50));
prm[2].Value = objEncryption.Encrypt(pobjCustomerProps.MobileNo.Trim());
prm[3] = Command.Parameters.Add(new OracleParameter("IP_CUSTOMER_NAME", OracleType.VarChar, 200));
prm[3].Value = pobjCustomerProps.CustomerName==""? "": objEncryption.Encrypt(pobjCustomerProps.CustomerName.Trim());

prm[4] = Command.Parameters.Add(new OracleParameter("IP_EMAILID", OracleType.VarChar, 500));
prm[4].Value = pobjCustomerProps.EmailID == "" ? "" : objEncryption.Encrypt(pobjCustomerProps.EmailID.Trim());

prm[5] = Command.Parameters.Add(new OracleParameter("IP_MODEL_CODE", OracleType.VarChar, 10));
prm[5].Value = pobjCustomerProps.ModelCode.Trim();

prm[6] = Command.Parameters.Add(new OracleParameter("IP_USER_UID", OracleType.VarChar, 10));
prm[6].Value = pobjCustomerProps.UserUID.Trim();

var lobjparamErrorCode = new OracleParameter("OP_ERROR_CODE", OracleType.Number) { Direction = ParameterDirection.Output };
prm[7] = Command.Parameters.Add(lobjparamErrorCode);

这是我的sp定义

 PROCEDURE PROC_ADD_DETAILS_V1
(
IP_ACTION IN VARCHAR2,
IOP_CUSTOMER_UID IN OUT DIGICALL.CUSTOMER_DTL.CUSTOMER_UID%TYPE,
IP_MOBILE_NO IN DIGICALL.CUSTOMER_DTL.MOBILE_NO%TYPE,
IP_CUSTOMER_NAME IN DIGICALL.CUSTOMER_DTL.CUSTOMER_NAME%TYPE,
IP_EMAILID IN DIGICALL.CUSTOMER_DTL.EMAIL_ID%TYPE,
IP_MODEL_CODE IN DIGICALL.CUSTOMER_DTL.MODEL_CODE%TYPE,
IP_USER_UID IN DIGICALL.CUSTOMER_DTL.USER_UID%TYPE,
OP_ERROR_CODE OUT NUMBER
)

最佳答案

有几件事可能会出错:

  • 您的参数数量可能有误。你的情况似乎没问题。
  • 您可能有错误的参数类型(关于输入/输出,关于数据类型)。在您的情况下,输入/输出似乎没问题。无法从您的描述中派生出数据类型,因为存储过程定义引用了其他某个对象。
  • 您可以按错误的顺序提供参数(因此类型错误)。请注意,默认情况下参数是按位置绑定(bind)的,即使您已经为每个参数指定了名称。这在一定程度上取决于您使用的是 ODP.NET 还是 System.Data.OracleClient 类。这似乎不是你的问题。
  • 可能是您的 CommandText 与参数不匹配。您的问题中缺少它,所以我们无法判断。

String.trim() 肯定不是问题。

关于c# - 存储过程调用给出错误 PLS-00306 ORA-06550,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com