2017-09-19 5 views
1

C# .net 4.5.2를 사용하고 Oracle DB와 함께 작업하고 있습니다. 나는 RAW 출력 매개 변수가 기능 (PPF)를 호출 해요 : 내가 함께 출력 매개 변수를 초기화 내 코드에서oracle 원시 출력 매개 변수의 경우 DbType이되어야합니다.

FUNCTION GET_ACCESS_CONTEXT(pTId  IN NUMBER, 
          pUId  IN RAW, 
          pOId  IN RAW, 
          pFId  IN NUMBER, 
          pPF OUT RAW) RETURN RAW IS 
    TYPE IDS_TP IS TABLE OF RAW(32); 
    IDS IDS_TP; 
BEGIN 
    WITH BASE AS(
    select fl.* 

     from t_folders_access fa 
    inner join t_folders_links fl on fl.tenant_id = fa.tenant_id 
            and fl.from_family_id = fa.family_id 
            and fl.from_object_id = fa.object_id 

    where fa.user_object_id = pUId 
     and fa.tenant_id = pTId 
     and fa.family_id = 12345 
     and fl.deleted_object_flag = 0 
     and fl.from_family_id = 12345 
     and fl.family_id = 54321) 
     select base.from_object_id BULK COLLECT 
     INTO IDS 
     from base 
     start with base.family_id = 54321 
       and base.to_family_id = 12345 
       and base.to_object_id = pOId 
     connect by nocycle prior base.from_object_id = base.to_object_id 
      and base.family_id = 54321; 


    IF IDS.LAST = 0 OR IDS is null or IDS.LAST is null THEN 
    pPF := null; 

    DBMS_OUTPUT.put_line ('return ' || pOId); 
    return pOId; 
    else 
    DBMS_OUTPUT.put_line ('return ' || (IDS(IDS.FIRST))); 
    pPF := IDS(IDS.FIRST); 
    DBMS_OUTPUT.put_line ('return ' || IDS(IDS.LAST)); 
    return IDS(IDS.LAST); 
    end if; 
END; 

을 :

DbType = DbType.Guid, 
Size = 32, 
Direction = ParameterDirection.Output, 
ParameterName = "pPF" 

나는 내 C#에서 함수를 호출하고있어 코드, 나는이 예외를 (같은 매개 변수를 직접 함수를 실행할 때 아무 예외도 ...) : "ORA-06502 : PL/SQL : 숫자 또는 값 오류 : 원시 가변 길이가 너무 깁니다.", 라인 : pPF := IDS(IDS.FIRST); IDS(IDS.FIRST) 값은 5093A4805899EB448F96BF9976F230AF입니다. 다른 DbTypes를 시도했지만 도움이되지 않았습니다.

내가 뭘 잘못하고 있니?

+0

전체 기능 코드를 표시 할 수 있습니까? –

답변

0

우리 시스템에는 어리석은 버그가 있지만 어쩌면 다른 사람에게 도움이 될 수 있습니다. 출력 매개 변수의 'Direction'속성 값이 'ParameterDirection.Input'값에 의해 실행되었습니다. DBType : 'Binary'및 'String'을 사용해도 문제가 해결되었습니다.