Ho una variabile clob, devo assegnarlo alla variabile varchar2. I dati all'interno clob var è inferiore a 4000 (maxsize i..e di varchar2) oracle10 +Come convertire CLOB in VARCHAR2 all'interno di oracle pl/sql
ho provato
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1));
report_clob := null;
ma si scopre report in tempo di valore che vedo durante il debug. Anche quando chiamo questo sql (proc) dal mio codice C#. Si lamenta dicendo buffer troppo piccolo, perché invio parametri come per varchar, ma la conversione sopra potrebbe trasformarla in valore lungo.
Ho anche provato l'assegnazione diretta
report_clob := report
ottenendo lo stesso risultato.
EDIT
Ok, di rispondere alle seguenti domande si prega di consultare: il debug utilizzando script di test in PL sviluppatore/SQL. la variabile di report è varchar2 (4000). Quando passo dopo la seconda linea. il rapporto mostra un valore lungo e dice semplicemente (valore lungo). non posso nemmeno vedere il contenuto.
report e report_clob sono fuori variabile dalla procedura. Questa procedura è chiamata dal codice C#.
C'è un buffer di stringa di eccezione troppo piccolo in C# quando chiamo questa procedura. Ho dato 5000 come dimensione della variabile di report in C# sufficiente per ricevere 4000 caratteri max dal valore della procedura. Quindi immagino che il problema non si trovi lì.
E quando assegno report: = 'some string ....' quindi la chiamata C# funziona correttamente.
Quindi la mia indagine dice che il rapporto: = transform (report_clob) sta facendo diventare il report un valore lungo o qualcosa del genere (strano) che rende problematico il codice C# per gestire un valore maggiore nel parametro 5000 varchar out.
Qualsiasi altro dettaglio sarò lieto di fornire.
Come viene dichiarato 'report'? 'LONG' o' VARCHAR2'? Come stai facendo il debug, e come stai restituendo il valore a 'C#' - function return o output parameter, e che tipo è? –
'report: = CAST (report_clob AS VARCHAR2 (3999));' – Annjawn
'DBMS_LOB.substr' restituisce un VARCHAR2, non è necessaria la funzione' TO_CHAR'. Inoltre, come si chiama un valore lungo? Come fai il debug? Che errore stai ottenendo esattamente (cioè Oracle o C#)? Come viene dichiarata la variabile del report? –