Mun*_*yal 10 oracle plsql clob
我有一个clob变量,需要将它分配给varchar2变量.clob var中的数据小于4000(i..e varchar2的maxsize)oracle10 +
我试过了
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1 ));
report_clob := null;
Run Code Online (Sandbox Code Playgroud)
但它会将报告转换为长值,我在调试时会看到它.当我从我的C#代码调用这个sql(proc)时.它抱怨说缓冲区太小,因为我按照varchar发送参数,但上面的转换可能会把它变成long值.
我甚至尝试过直接任务
report_clob := report
Run Code Online (Sandbox Code Playgroud)
获得相同的结果.
编辑
好的,要回答以下问题,请参阅:我在PL/SQL开发人员中使用测试脚本进行调试.报告变量是varchar2(4000).当我走后第二行.报告显示为一个很长的值,它只是说(长期价值).甚至看不到内容.
report和report_clob是程序中的变量.从C#代码调用此过程.
调用此过程时,C#中的异常字符串缓冲区太小.我已经在C#中给出了5000作为报告变量的大小,足以从过程中接收4000个最大字符值.所以我猜问题并不在于此.
当我分配report:='some string ....'时,C#call工作正常.
所以我的调查说报告:= transform(report_clob)正在使报告成为长值或某些这样的东西(怪异的)使得C#代码在5000 varchar out参数中处理更大的值时会出现问题.
我很乐意提供更多细节.
引用(在这里阅读) -
使用CAST将CLOB值转换为字符数据类型或将BLOB值转换为RAW数据类型时,数据库会隐式将LOB值转换为字符数据或原始数据,然后将结果值显式转换为目标数据类型.
所以,这样的事情应该有效 -
report := CAST(report_clob AS VARCHAR2);
Run Code Online (Sandbox Code Playgroud)
或者更好地使用它作为CAST(report_clob AS VARCHAR2)
你试图使用BLOB
as的地方VARCHAR