【问题标题】:How to get full value of clob while debugging PL SQL script on sql developer在sql developer上调试PL SQL脚本时如何获得clob的全部价值
【发布时间】:2017-04-10 02:32:12
【问题描述】:

我将在 SQL Developer 上的过程 PL/SQL 中进行调试,该过程进行大查询并将其存储在 CLOB 中。当我取该 CLOB 的值时,该值被截断。谁能知道在调试模式下获取 CLOB 全部值的任何方法?

【问题讨论】:

  • 截断长度是 1300 而不是 4000(Oracle 中 varchar 的最大值)。程序没有错误

标签: debugging plsql plsqldeveloper


【解决方案1】:

感谢@gregorianisch 的回答,我制作了自己的版本,它只是考虑回车来计算下一个块,而不是剪切任何消息(我需要打印查询语句)

PROCEDURE print_clob(
    input_string IN CLOB
)
IS

    out_string_in CLOB default input_string;
    clob_length NUMBER := DBMS_LOB.GETLENGTH(out_string_in);
    v_offset NUMBER default 0;
    v_chunk_size NUMBER := 32767;
    v_substr CLOB;

BEGIN

    DBMS_OUTPUT.ENABLE(1000000);

    WHILE v_offset < clob_length
    LOOP

        v_chunk_size := 32767;
        v_substr := SUBSTR(out_string_in, v_offset + 1, v_chunk_size);
        v_chunk_size := CASE WHEN INSTR(v_substr, CHR(10), -1) > 0 THEN INSTR(v_substr, CHR(10), -1) ELSE 32767 END;
        v_substr := SUBSTR(out_string_in, v_offset + 1, v_chunk_size);
        DBMS_OUTPUT.PUT_LINE(v_substr);
        v_offset := v_offset + v_chunk_size;

    END LOOP;

END print_clob;

【讨论】:

    【解决方案2】:

    这可能不是您正在寻找的答案,但在我的应用程序中,我创建了一个列数据类型为 clob 的虚拟表。所以每当我想得到这个值时,我都会插入到这个临时表中。

    【讨论】:

    • 我的情况也是如此。我不认为这是直接在 SQL Developer 调试模式下的解决方案
    【解决方案3】:

    这个程序应该可以帮助你,如果我理解正确你想打印 clob 的完整值吗?

    PROCEDURE PRINT_CLOB(par_clob IN CLOB) IS
       ln_offset NUMBER DEFAULT 1;
    BEGIN
     LOOP
      EXIT WHEN ln_offset > dbms_lob.getlength(par_clob);
      dbms_output.put_line(dbms_lob.substr(par_clob, 255, ln_offset));
      ln_offset := ln_offset + 255;
     END LOOP;
    END PRINT_CLOB;
    

    【讨论】:

    • 是一个解决方案,但我需要直接在 SQL Developer 调试模式下的解决方案。
    • @Milaci 你找到解决办法了吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2020-03-21
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多