I am trying to insert data in to oracle database using Packaged stored procedure, But its giving the exception that wrong number or types of argument in call. Below is c# Code block
_unitOfWork.BeginTransaction();
var ID = new OracleParameter("i_ID", OracleDbType.Decimal, null, ParameterDirection.InputOutput);
var para = new OracleParameter[] {
ID,
new OracleParameter("i_PERSON_ID", OracleDbType.Decimal, iCPREC.PERSON_ID, ParameterDirection.Input),
new OracleParameter("i_VENDOR_NAME", OracleDbType.NVarchar2, iCPREC.VENDOR_NAME, ParameterDirection.Input),
new OracleParameter("i_BUSINESS_ID", OracleDbType.NVarchar2, iCPREC.BUSINESS_ID, ParameterDirection.Input),
new OracleParameter("i_MODIFIEDBY", OracleDbType.NVarchar2, iCPREC.MODIFIEDBY, ParameterDirection.Input),
new OracleParameter("i_VENDOR_PROVINCE", OracleDbType.NVarchar2, iCPREC.VENDOR_PROVINCE, ParameterDirection.Input),
new OracleParameter("i_GST_HST_NUMBER", OracleDbType.NVarchar2, iCPREC.GST_HST_NUMBER, ParameterDirection.Input),
new OracleParameter("i_VENDOR_SUITE", OracleDbType.NVarchar2, iCPREC.VENDOR_SUITE, ParameterDirection.Input),
new OracleParameter("i_PSF_SUPPLIER_ID", OracleDbType.NVarchar2, iCPREC.PSF_SUPPLIER_ID, ParameterDirection.Input),
new OracleParameter("i_TAX_EXEMPT", OracleDbType.NVarchar2, iCPREC.TAX_EXEMPT, ParameterDirection.Input),
new OracleParameter("i_DATEMODIFIED", OracleDbType.Date, iCPREC.DATEMODIFIED, ParameterDirection.Input),
new OracleParameter("i_VENDOR_STREET", OracleDbType.Varchar2, iCPREC.VENDOR_STREET, ParameterDirection.Input),
new OracleParameter("i_SK_PST_NUMBER", OracleDbType.Varchar2, iCPREC.SK_PST_NUMBER, ParameterDirection.Input),
new OracleParameter("i_QST_NUMBER", OracleDbType.Varchar2, iCPREC.QST_NUMBER, ParameterDirection.Input),
new OracleParameter("i_CREATEDBY", OracleDbType.Varchar2, iCPREC.CREATEDBY, ParameterDirection.Input),
new OracleParameter("i_VENDOR_POSTALCODE", OracleDbType.Varchar2, iCPREC.VENDOR_POSTALCODE, ParameterDirection.Input),
new OracleParameter("i_DATECREATED", OracleDbType.Date, iCPREC.DATECREATED, ParameterDirection.Input),
new OracleParameter("i_PERSON_EMAIL", OracleDbType.Varchar2, iCPREC.PERSON_EMAIL, ParameterDirection.Input),
new OracleParameter("i_VENDOR_CITY", OracleDbType.Varchar2, iCPREC.VENDOR_CITY, ParameterDirection.Input),
};
var result = await _unitOfWork.ExecuteSqlCommandAsync("TAPK_ICPREC_DATA.tapp_main_insert", para);
Below is Oracle package sql package script
create or replace PACKAGE TAPK_ICPREC_DATA IS PROCEDURE tapp_main_insert(
i_ID IN OUT number,
i_VENDOR_NAME IN varchar2,
i_BUSINESS_ID IN varchar2,
i_MODIFIEDBY IN varchar2,
i_VENDOR_PROVINCE IN varchar2,
i_GST_HST_NUMBER IN varchar2,
i_VENDOR_SUITE IN varchar2,
i_PSF_SUPPLIER_ID IN varchar2,
i_TAX_EXEMPT IN varchar2,
i_DATEMODIFIED IN date,
i_PERSON_ID IN number,
i_VENDOR_STREET IN varchar2,
i_SK_PST_NUMBER IN varchar2,
i_QST_NUMBER IN varchar2,
i_CREATEDBY IN varchar2,
i_VENDOR_POSTALCODE IN varchar2,
i_DATECREATED IN date,
i_PERSON_EMAIL IN varchar2,
i_VENDOR_CITY IN varchar2
);
END TAPK_ICPREC_DATA;
Below is Package Body Script
create or replace PACKAGE BODY TAPK_ICPREC_DATA AS
PROCEDURE tapp_main_insert
(
i_ID IN OUT number,
i_VENDOR_NAME IN varchar2,
i_BUSINESS_ID IN varchar2,
i_MODIFIEDBY IN varchar2,
i_VENDOR_PROVINCE IN varchar2,
i_GST_HST_NUMBER IN varchar2,
i_VENDOR_SUITE IN varchar2,
i_PSF_SUPPLIER_ID IN varchar2,
i_TAX_EXEMPT IN varchar2,
i_DATEMODIFIED IN date,
i_PERSON_ID IN number,
i_VENDOR_STREET IN varchar2,
i_SK_PST_NUMBER IN varchar2,
i_QST_NUMBER IN varchar2,
i_CREATEDBY IN varchar2,
i_VENDOR_POSTALCODE IN varchar2,
i_DATECREATED IN date,
i_PERSON_EMAIL IN varchar2 ,
i_VENDOR_CITY IN varchar2
) IS
-- --------------------------------------------------
v_Count NUMBER ;
v_timestamp VARCHAR2 (16) ;
v_id NUMBER ;
JustModified EXCEPTION ;
JustDeleted EXCEPTION ;
-- --------------------------------------------------
BEGIN
SELECT TAPT_ICPREC_SEQ.NEXTVAL INTO v_id FROM DUAL ;
INSERT INTO TAPT_IC_PREC_VENDOR
(
Id
,VENDOR_NAME
,BUSINESS_ID
,MODIFIEDBY
,VENDOR_PROVINCE
,GST_HST_NUMBER
,VENDOR_SUITE
,PSF_SUPPLIER_ID
,TAX_EXEMPT
,DATEMODIFIED
,PERSON_ID
,VENDOR_STREET
,SK_PST_NUMBER
,QST_NUMBER
,CREATEDBY
,VENDOR_POSTALCODE
,DATECREATED
,PERSON_EMAIL
,VENDOR_CITY)
VALUES
(v_id
,i_VENDOR_NAME
,i_BUSINESS_ID
,i_MODIFIEDBY
,i_VENDOR_PROVINCE
,i_GST_HST_NUMBER
,i_VENDOR_SUITE
,i_PSF_SUPPLIER_ID
,i_TAX_EXEMPT
,i_DATEMODIFIED
,i_PERSON_ID
,i_VENDOR_STREET
,i_SK_PST_NUMBER
,i_QST_NUMBER
,i_CREATEDBY
,i_VENDOR_POSTALCODE
,i_DATECREATED
,i_PERSON_EMAIL
,i_VENDOR_CITY) ;
i_ID := v_id ;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20303, SQLERRM (SQLCODE)) ;
END ;
-- --------------------------------------------------
END TAPK_ICPREC_DATA;
Hope it helps to understand the issue.
Exception : ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'TAPP_MAIN_INSERT' ORA-06550: line 1, column 7: PL/SQL: Statement ignored
I tried some articles from oracle community as below
It seems like Its due to wrong data type in call or spelling mistake , but I have crossed checked all the parameters.
CodePudding user response:
It looks like you are declaring the variables as nvarchar
rather than varchar
. That will cause this error for sure. The same thing might be true with decimal
... you probably can't bind a decimal
to a number
, though I'm not 100% sure of that since decimal uses a number type under the covers. Make sure you use the exact matching datatypes in your Oracle client driver interface that corresponds with the datatypes of your procedure parameters.