【问题标题】:How to access the dbms_output buffer from C code?如何从 C 代码访问 dbms_output 缓冲区?
【发布时间】:2021-08-17 00:44:42
【问题描述】:

各种 Oracle 解决方案都涉及带有 dbms_output 包的 PL/SQL sn-ps,尤其是 dbms_output.put_line()

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

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

【问题讨论】:

标签: c oracle plsql oracle-call-interface dbms-output


【解决方案1】:

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

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

dbms_output.enable;

运行 PL/SQL sn-p 后,您可以像这样检索单行输出:

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,它会返回一个字符串数组和行数。有关过程和参数的完整描述,请参阅包文档。

【讨论】:

  • sqlplus 使用dbms_output 很容易——而且例子比比皆是。从 C 代码中执行它是我在这里寻找的。​​span>
  • 抱歉,C 部分我帮不上忙。但是我提供的代码都是 PL/SQL,没有特定于 sqlplus 的。无论您如何调用当前的 PL/SQL sn-p,您都可以简单地在其前后添加这些命令。
  • 看起来没有人从 C(甚至 C++)程序访问 Oracle。仍然有 C 专家和 SQL 专家,但没有人有 both...当然不是 SO...
  • @MikhailT。这里有一些用户同时具备这两种技能,但并不多。我添加了一个更具体的标签,希望这能吸引他们回答这个问题。
  • 检查这个(我的项目)github.com/tora-tool/tora/blob/master/src/widgets/tooutput.cpp 基本上你需要调用 DBMS_OUTPUT: ENABLE GET_LINES GET_LINE
猜你喜欢
  • 2013-05-04
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多