2017-09-19 1 views
1

J'utilise C# .net 4.5.2 et je travaille avec Oracle DB. J'appelle une fonction qui a le paramètre de sortie RAW (PPF):Ce qui devrait être le DbType dans le cas d'un paramètre de sortie brut oracle

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; 

Dans mon code, j'initialiser le paramètre de sortie avec:

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

Quand j'appelle la fonction de mon C# code, j'obtiens cette exception (quand j'exécute la fonction directement avec les mêmes paramètres il n'y a pas d'exception ...): "ORA-06502: PL/SQL: erreur numérique ou de valeur: longueur de variable brute trop longue", ligne: pPF := IDS(IDS.FIRST); tandis que IDS(IDS.FIRST) la valeur est 5093A4805899EB448F96BF9976F230AF. J'ai essayé différents DbTypes mais cela n'a pas aidé.

Qu'est-ce que je fais mal?

+0

Pouvez-vous montrer le code de la fonction entière? –

Répondre

0

Il s'est avéré qu'il y avait un bogue dans notre système, mais peut-être que cela peut aider les autres: La valeur de la propriété 'Direction' de mon paramètre de sortie a été écrasée par la valeur 'ParameterDirection.Input'. Quand je l'ai corrigé ça fonctionnait bien même avec DBType: 'Binary' et 'String'.