Tengo una variable de clob, necesito asignarla a la variable varchar2. Los datos dentro de CLOB var es inferior a 4000 (maxsize i..e de varchar2) oracle10 +Cómo convertir CLOB a VARCHAR2 dentro de oracle pl/sql
Probé
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1));
report_clob := null;
pero resulta informe en tiempo de valor, que veo durante la depuración. También cuando llamo a este sql (proc) desde mi código C#. Se queja diciendo que el búfer es demasiado pequeño, porque envío el parámetro como varchar, pero la conversión anterior podría estar convirtiéndolo en un valor largo.
Incluso intenté asignación directa
report_clob := report
conseguir el mismo resultado.
EDITAR
Ok, para contestar las siguientes preguntas: consulte I depuración mediante escritura de la prueba en PL/SQL Developer. la variable de informe es varchar2 (4000). Cuando paso después de la 2da línea. el informe muestra que tiene un valor largo y solo dice (valor largo). Ni siquiera puedo ver los contenidos.
informe y report_clob son variables del procedimiento. Este procedimiento se llama desde el código C#.
Hay un búfer de cadena de excepción demasiado pequeño en C# cuando llamo a este procedimiento. He dado 5000 como tamaño de variable de informe en C# suficiente para recibir 4000 caracteres como máximo del procedimiento. Así que supongo que el problema no está allí.
Y cuando asigno el informe: = 'some string ....', la llamada C# funciona bien.
Así que mi investigación dice que report: = transform (report_clob) hace que el informe se convierta en un valor largo o algo así (raro) que hace que el código C# sea problemático para manejar un valor mayor en 5000 varchar out parameter.
Más detalles que estaré encantado de proporcionarle.
¿Cómo se declara 'informe'? 'LONG' o' VARCHAR2'? ¿Cómo está depurando, y cómo está devolviendo el valor a 'C#' - función de retorno o parámetro de salida, y qué tipo es eso? –
'informe: = CAST (report_clob AS VARCHAR2 (3999));' – Annjawn
'DBMS_LOB.substr' devuelve un VARCHAR2, no necesita la función' TO_CHAR'. Además, ¿cómo se llama un valor largo? ¿Cómo se depura? ¿Qué mensaje de error está recibiendo exactamente (es decir, Oracle o C#)? ¿Cómo se declara la variable del informe? –