2010-01-16 14 views
5

Wywołuję przechowywany proc z aplikacji .NET. Proces zwraca parametr out typu Varchar2. Aby fet CH parametr wyjściowy jestem przechodzącej parametr do komendy jak OracleParameter:Błąd Oracle.Dataaccess ORA-06502: PL/SQL: błąd numeryczny lub wartość: bufor znaków ciąg znaków zbyt mały

parm12 = new OracleParameter("testkey" 
           , OracleDbType.Varchar2 
           , out2 
           , ParameterDirection.Output); 

Kiedy wykonać proc Otrzymuję błąd

PL/SQL: numeric or value error: character string buffer too small. 
+0

każde ostateczne rozwiązanie z pełnym kodem źródłowym próbującym o tym pracować? – Kiquenet

Odpowiedz

1

W kodzie out2 jest argument określa długość parametru. Sprawdź wartość w tej zmiennej, ponieważ widocznie nie jest ona wystarczająco długa dla wyniku procedury.

6

Znaleziono odpowiedź.

Dla parametru OUT zadeklarowałem maksymalny rozmiar varchar - 32767 i zaczęło działać.

Aby uprościć przechowywany proc zwraca parametr OUT typu VARCHAR2. Ale aby zużywać to wyjście z .NET i przechodziło VARCHAR2 bez żadnego rozmiaru. Zatem przestrzeń buforowa przydzielona do otrzymania wartości powrotnej wynosiła 0 bajtów. Kiedy proc zwróci wartość większą niż przydzielony bufor, który wynosi 0 bajtów, błąd ten jest pomijany.

Tak określono maksymalną wartość VARCHAR2-32767 w kodzie C# i zaczęło działać :).

Powiązane problemy