2010-01-16 14 views
5

Sto richiamando un proc memorizzato dall'app .NET. Il proc restituisce un parametro out di tipo Varchar2. Per fet CH L'parametro out sto passando il parametro al comando come OracleParameter:Errore Oracle.Dataaccess ORA-06502: PL/SQL: errore numerico o di valore: buffer stringa di caratteri troppo piccolo

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

Quando eseguo il proc sto ricevendo un errore

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

qualsiasi soluzione finale con esempio di codice sorgente completo a lavorare su di esso? – Kiquenet

risposta

1

Nel codice out2 è l'argomento che specifica la lunghezza del parametro. Quindi controlla il valore in quella variabile, perché apparentemente non è abbastanza lungo per l'output della procedura.

6

Trovato la risposta.

Per il parametro OUT ho dichiarato la dimensione al massimo di varchar - 32767 e ha iniziato a funzionare.

Per semplificare, il proc memorizzato restituisce un parametro OUT di tipo VARCHAR2. Ma per consumare quell'output da .NET stavo passando a VARCHAR2 senza alcuna dimensione. Quindi lo spazio del buffer assegnato per ricevere il valore di ritorno era 0 byte. Quando il proc restituisce il valore più del buffer allocato, che è 0 byte, viene eliminato.

Quindi ho specificato il massimo di VARCHAR2-32767 nel codice C# e ha iniziato a funzionare :).