2013-07-16 19 views
5

Nie wiem, czy jestem czegoś brakuje ale to, co robię jest:PL/SQL: numeryczny lub wartość błędu: bufor zbyt mały ciąg znaków% ROWTYPE

Mam funkcję zwracającą ROWTYPE

FUNCTION myFunc(pChar CHAR) RETURN myTable%ROWTYPE AS 
    myTable_rec myTable%ROWTYPE; 
    BEGIN 
    SELECT col1, col2, col3 
    INTO myTable_rec.col1 
     , myTable_rec.col2 
     , myTable_rec.col3 
    FROM myTable 
    WHERE col4 = pChar; 

    RETURN(myTable_rec); 
    END B001_03; 

następnie w moim procedury (która wywołuje funkcję powyżej), oświadczyłem:

myTable_rec myTable%ROWTYPE; 

ale gdy zgłoszę w postępowaniu:

... 
myTable_rec := myFunc(someChar); 
... 

uzyskać

ORA-06502: PL/SQL: numeric or value error: character string buffer too small 

nie są pola powinien być z tej samej tabeli i z tego samego typu danych (zgodnie z moim małym zrozumieniem)?

EDYCJA: Próbowałem WYBIERZ * i wszystkie prace. Zdecydowanie brakuje czegoś tutaj. Po prostu nie wiem, że tak.

+0

dlaczego nie używasz Varchar2 zamiast Char? –

+0

wow, który naprawdę rozwiązał problem. Połóż odpowiedź, a ja oznaczy ją jako najlepszą odpowiedź. Naprawdę zastanawia mnie to, że "someChar" jest zapytany z tej samej kolumny ORAZ kolumny, więc spodziewałem się, że będzie miał ten sam typ i długość co col4. – Incognito

Odpowiedz

5

Założę się, że problem pochodzi z użycia znaku Char, który jest ciągiem o stałej długości. Nie jestem pewien gdzie, ale gdzieś w twoim kodzie próbujesz umieścić łańcuch znaków Char lub varchar2 o długości N w znak o długości M gdzie M> N.

3

Otrzymałem ten błąd podczas uzyskiwania dostępu do Oracle SP za pośrednictwem mojego kodu .Net . Jeśli ktoś napotyka ten błąd, wówczas dla niego/niej określenie rozmiaru parametru wejściowego/wyjściowego może pomóc w rozwiązaniu problemu.

Przykładowy kod wygląda tak:

OracleParameter oparamProjectId = mycom.Parameters.Add ("p_open_flag" OracleDbType VARCHAR2); oparamProjectId.Direction = ParameterDirection.Output; oparamProjectId.Size = 100;

+0

Idealny! Po długich próbach znalezienia błędu w końcu wiem dlaczego. Dziękuję Ci bardzo! –

Powiązane problemy