简体   繁体   English

即使正确的参数,调用中的参数数目或类型也错误

[英]Wrong number or types of arguments in call to even after correct parameters

I have spent plenty of my time investigating about this issue, even I have found few similar posts on this site but not useful. 我花了很多时间来研究这个问题,即使我在该站点上发现了很少的类似帖子,但也没有用。

If someone can help me. 如果有人可以帮助我。

Below is the Exception: 以下是例外:

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

C# code: C#代码:

public static List<CHPGroupishObject> ConnectThirdPartyOracleDBForData(string connectionstring, string SPName, string Filter, string Param2, string Param3, string Param4)
    {
        DataSet result;
        List<CHPGroupishObject> lstCHPGroupishObject = new List<CHPGroupishObject>();
        CHPGroupishObject cHPGroupishObject = null;
        try
        {
            DbMain objDbHandler = new DbMain(connectionstring);
            RetResult resultObject = new RetResult();
            ArrayList colParams = new ArrayList();
            OracleParameter param = new OracleParameter("Filter", OracleType.VarChar, 300, ParameterDirection.Input, "", DataRowVersion.Default, true, Filter);
            colParams.Add(param);
            param = new OracleParameter("Param2", OracleType.VarChar, 300, ParameterDirection.Input, "", DataRowVersion.Default, true, Param2);
            colParams.Add(param);
            param = new OracleParameter("Param3", OracleType.VarChar, 300, ParameterDirection.Input, "", DataRowVersion.Default, true, Param3);
            colParams.Add(param);
            param = new OracleParameter("Param4", OracleType.VarChar, 300, ParameterDirection.Input, "", DataRowVersion.Default, true, Param4);
            colParams.Add(param);
            param = new OracleParameter("RefCursor", OracleType.Cursor, 4000, ParameterDirection.Output, "", DataRowVersion.Default, true, null);
            colParams.Add(param);
            result = objDbHandler.ExecuteProcedure(SPName, "GARSAccount", ref colParams);
            foreach (DataRow row in result.Tables[0].Rows)
            {
                cHPGroupishObject = new CHPGroupishObject();
                cHPGroupishObject.dn = row["EntitlementCode"].ToString();
                cHPGroupishObject.Name = row["EntitlementName"].ToString();
                lstCHPGroupishObject.Add(cHPGroupishObject);
            }
            return lstCHPGroupishObject;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

Oracle Stored Procedure: Oracle存储过程:

CREATE OR REPLACE PROCEDURE AEP_SYSTEMATIC.AUTOPROVGETUSERGROUPS(
          Filter IN VARCHAR,  -- Clone id.  Pass null unless Param2 is 'Clone from user'
          Param2 IN VARCHAR,  -- MyAccess profile
    Param3 IN VARCHAR,
    Param4 IN VARCHAR,
          RefCursor OUT SYS_REFCURSOR)
AS
    cloneUser varchar(200);
    num_users number;
    sqlErr varchar2(4000);
begin
    if (Filter is null or Filter = '') then
        insert into AEP_SYSTEMATIC.AUTOPROVLOG(MESSAGETYPE, MESSAGE, USERNAME)
        values ('INFO', 'GetUserGroups requested with blank clone user', 'MyAccess');
        commit;
        open RefCursor for
        select 'FAIL' as Result, 'No clone user provided' as Message from dual;
        return;
    end if;
    cloneUser := trim(Filter);
    insert into AEP_SYSTEMATIC.AUTOPROVLOG(MESSAGETYPE, MESSAGE, USERNAME)
        values ('INFO', 'Getting user groups for ' || cloneUser || ' ' || Param2, cloneUser);
    commit;
    select count(USER_NAME) into num_users from AEP_SYSTEMATIC.DRC_USERS where USER_NAME = cloneUser;
        if (num_users = 0) then
        insert into AEP_SYSTEMATIC.AUTOPROVLOG(MESSAGETYPE, MESSAGE, USERNAME)
            values ('ERROR', 'Failed to find USER_NAME for user ' || cloneUser, cloneUser);
        commit;
        open RefCursor for
        select 'FAIL' as Result, 'Failed to find USER_NAME for user ' || cloneUser as Message from dual;
        return;
          else
        OPEN RefCursor FOR
        select distinct '[UserGroup:' || u.RIGHTS || ']' as EntitlementCode,
        u.RIGHTS || ' - ' || ug.DESCRIPTION as EntitlementName
        from AEP_SYSTEMATIC.DRC_USERS u, AEP_SYSTEMATIC.DRC_USER_GROUPS ug
        where
        (
            cloneUser is null or not cloneUser is null and RIGHTS in
            (select RIGHTS from AEP_SYSTEMATIC.DRC_USERS where USER_NAME = cloneUser)
        )
        and u.RIGHTS = ug.USER_GROUP;
    end if;
    exception when others then
        sqlErr := sqlerrm;
        insert into AEP_SYSTEMATIC.AUTOPROVLOG(MESSAGETYPE, MESSAGE, USERNAME)
        values('ERROR', substr(sqlErr, 1, 1800), cloneUser);
        commit;
        open RefCursor for
        select 'FAIL' as Result, 'Error in AutoProvGetUserGroups: ' || substr(sqlErr, 1, 500) as Message from dual;
end AUTOPROVGETUSERGROUPS;
/
GRANT EXECUTE ON AEP_SYSTEMATIC.AUTOPROVGETUSERGROUPS TO AEP_SYSTEMATIC_RO_ROLE
/

ok got my answer!! 好吧,我的答案!!

String is nullable type and SQL server accepts if we pass null string to it but Oracle doesn't. 字符串是可为空的类型,如果我们将空字符串传递给它,SQL Server会接受,但Oracle不会。

Here, Param2 was passing null and because of that it was giving an error. 在这里,Param2传递了null,因此它给出了一个错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 呼叫的参数数目或类型错误 - wrong number or types of arguments in call to 呼叫的参数数目或类型错误 - Wrong number or types of arguments in call to 呼叫中 arguments 的数量或类型错误 - wrong number or types of arguments in call nPLS-00306:调用中参数的数量或类型错误 - nPLS-00306: wrong number or types of arguments in call 如何解决此问题“ PLS-00306:呼叫中参数的数量或类型错误……” - How to resolve this “PLS-00306: wrong number or types of arguments in call…” 使用PLS-00306调用带有Char Out参数错误的Oracle存储过程:调用中的参数数目或类型错误 - Call Oracle Stored Procedure with Char Out Parameter errors with PLS-00306: wrong number or types of arguments in call 错误的号码或类型的存储过程调用 - Wrong number or types in call of a sproc 运行不带参数的过程时出错:PLS-00306:调用中参数的数目或类型错误 - Error while running procedure without parameter: PLS-00306: wrong number or types of arguments in call ORA-06550:第 1 行,第 7 列:PLS-00306:调用“INSERTBILL”时 arguments 的编号或类型错误 - ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'INSERTBILL' C# - ORA-06550:调用“DOPROCESS”时的参数数量或类型错误 - C# - ORA-06550:wrong number or types of arguments in call to 'DOPROCESS'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM