我在Oracle中有一个存储过程,它有一些参数,我从C#(http处理程序)调用它,有时会得到异常。
PLS-00306:调用'PROC_ADD _...'时参数的数量或类型错误 ORA-06550:第1行第7栏:
PL / SQL:忽略语句
我知道错误的数字或类型的含义。这意味着我没有在过程调用的所有参数中提供值。
我的问题是我在每个参数值中都使用了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
)
答案 0 :(得分:3)
有几件事可能出错:
String.trim()
肯定不是问题。
答案 1 :(得分:2)
我收到了这个错误,这是一个完整的红鲱鱼。
安装了Oracle客户端11.2和9.2。带有x86应用程序的x64位服务器。
通过卸载11.2并更改连接字符串以使用 msdaora.1 而不是 OraOLEDB.Oracle.1 来解决问题。
Alex Keh - Oracle产品经理解释了为什么会这样做:https://community.oracle.com/thread/2491412
希望这可以为其他人节省一些头发和几天的挫折感。
答案 2 :(得分:0)
我遇到了类似的问题,但是我需要更改连接字符串以包含
providerName =“ Oracle.ManagedDataAccess.Client”
代替
providerName =“ Oracle.DataAccess.Client”