簡體   English   中英

即使正確的參數,調用中的參數數目或類型也錯誤

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

我花了很多時間來研究這個問題,即使我在該站點上發現了很少的類似帖子,但也沒有用。

如果有人可以幫助我。

以下是例外:

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#代碼:

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存儲過程:

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
/

好吧,我的答案!!

字符串是可為空的類型,如果我們將空字符串傳遞給它,SQL Server會接受,但Oracle不會。

在這里,Param2傳遞了null,因此它給出了一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM