如何从 C 代码访问 dbms_output 缓冲区?

问题描述

各种 Oracle 解决方案都涉及带有 dbms_output 包的 PL/sql 片段——尤其是 dbms_output.put_line()

这些与 sqlplus 解释器一起使用,但我们的一些代码使用 C API(oci.hociapr.h 和朋友)。

有没有办法用这些函数获取 DBMS 缓冲区的内容

解决方法

您可以使用过程 DBMS_OUTPUT.GET_LINE 从缓冲区中检索信息。我无法帮助您处理 C 代码,但以下代码是要调用的 Oracle PL/SQL 过程。

在运行调用 DBMS_OUTPUT.PUT_LINE 的 PL/SQL 片段之前,运行此过程以启用缓冲区:

dbms_output.enable;

运行 PL/SQL 代码段后,您可以像这样检索单行输出:

declare
    v_line varchar2(32767);
    v_status integer;
begin
    dbms_output.get_line(v_line,v_status);

    --Do something with the output in V_LINE here
    ...
end;
/

对于更大的输出,您可能需要调用 DBMS_OUTPUT.GET_LINES,它返回一个字符串数组和行数。有关过程和参数的完整说明,请参阅包文档。