我有一个 clob 变量,需要将它分配给 varchar2 变量。clob var 里面的数据小于 4000(即 varchar2 的 maxsize) oracle10+
我试过了
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1 ));
report_clob := null;
但它会将报告变成我在调试时看到的长值。另外,当我从我的 C# 代码中调用这个 sql (proc) 时。它抱怨说缓冲区太小,因为我按照 varchar 发送参数,但上面的转换可能会将它变成长值。
我什至尝试过直接分配
report_clob := report
得到相同的结果。
编辑
好的,要回答以下问题,请参阅:我在 PL/SQL 开发人员中使用测试脚本进行调试。报告变量是 varchar2(4000)。当我在第二行之后。报告显示是一个长期值,它只是说 (Long Value) 。连内容都看不到。
report 和 report_clob 是过程中的变量。此过程是从 C# 代码调用的。
当我调用此过程时,C# 中有一个异常字符串缓冲区太小。我在 C# 中给出了 5000 作为报告变量的大小,足以从过程中接收 4000 个最大字符值。所以我想问题不在于那里。
当我分配 report:= 'some string....' 然后 C# 调用工作正常。
因此,我的调查表明,report := transform (report_clob) 正在使报告变成长值或某些类似的东西(奇怪),这使得 C# 代码在处理 5000 varchar out 参数中的更大值时出现问题。
我很乐意提供更多细节。