【问题标题】:Exporting query results in a csv file with oracle procedures使用 oracle 过程将查询结果导出到 csv 文件中
【发布时间】:2022-01-18 18:39:06
【问题描述】:

我需要创建一个将查询作为参数的过程,并且该查询的结果应该导出到 csv 文件中,但我找不到解决方案,请您帮帮我吗?

【问题讨论】:

  • 文件需要在哪里创建?在数据库服务器上,还是在客户端?
  • 必须在客户端创建
  • 您将无法使用存储过程来做到这一点。 PL/SQL 只能看到服务器上的DIRECTORY 对象。客户端上的任何文件创建都必须由客户端上运行的应用程序执行。应用程序可以调用该过程来返回数据,但应用程序必须创建并填充 csv 文件。
  • 请阅读“为什么帮助我不是一个问题”(meta.stackoverflow.com/questions/284236/…)和“如何提问”(stackoverflow.com/questions/how-to-ask),然后发布一个最小的可重现示例(stackoverflow.com/help/minimal-reproducible-example)和错误(s) 你得到了。
  • 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: sql database oracle stored-procedures plsql


【解决方案1】:

当您将 任何查询 传递给存储过程时(不过,我宁愿建议一个函数),您无法知道将涉及哪些列,以便您可以“准备”局部变量或类似的东西。当然,我想到的是 ref cursor,它是从我之前提到的函数返回的。

这是一个例子;看看有没有帮助。

功能; par_query 是您将作为函数参数传递的查询。然后它(函数)返回参考光标。

SQL> create or replace function f_test (par_query in varchar2)
  2    return sys_refcursor
  3  is
  4    rc sys_refcursor;
  5  begin
  6    open rc for par_query;
  7    return rc;
  8  end;
  9  /

Function created.

让我们测试一下:

SQL> var l_rc refcursor
SQL> begin
  2    :l_rc := f_test('select d.dname, e.ename, e.job, e.sal from emp e join dept d ' ||
  3                    'on e.deptno = d.deptno where d.deptno = 10 '                   ||
  4                    'order by d.deptno, e.ename');
  5  end;
  6  /

PL/SQL procedure successfully completed.

l_rc 现在包含传递给函数的查询结果。让我们将它存储到文件中。如何?线轴!文件将存储在您自己的 PC 上(因此,您不必访问数据库服务器)。

SQL> spool test.txt
SQL> print l_rc

DNAME          ENAME      JOB              SAL
-------------- ---------- --------- ----------
ACCOUNTING     CLARK      MANAGER         2450
ACCOUNTING     KING       PRESIDENT       5000
ACCOUNTING     MILLER     CLERK           1300

SQL> spool off

就是这样。文件内容是什么?

SQL> $type test.txt
SQL> print l_rc

DNAME          ENAME      JOB              SAL
-------------- ---------- --------- ----------
ACCOUNTING     CLARK      MANAGER         2450
ACCOUNTING     KING       PRESIDENT       5000
ACCOUNTING     MILLER     CLERK           1300

SQL> spool off

一种作品。如果你愿意,让它变得漂亮。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 2015-01-10
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多