PL SQL过程中的“假脱机”-命令问题

时间:2019-12-03 10:20:14

标签: oracle plsql export-to-csv procedure spool

我试图在一个Oracle数据库中创建一个过程。该过程适用于我的同事,这样每个人都可以将查询结果导出到一个csv文件中。

我正在使用“假脱机”命令。在Oracle SQL Developer中分别在BEGIN和END之间运行代码时(以脚本F5运行)-它起作用了,并在本地创建了文件。

然后我尝试将其放入过程中,这就是问题开始的地方。出现一些编译错误。它们中的大多数都具有代码“ PLS-00103”。我尝试搜索它,但到目前为止没有成功。我什至尝试了EXECUTE IMMEDIATE语句,在其中放入了一些脚本块-到目前为止还无法正常工作。

对于解决我的情况,我将不胜感激。

P.s。我的第一个尝试是:

CREATE OR REPLACE PROCEDURE export_to_csv (SOURCE IN VARCHAR2, EXPORT_PATH IN VARCHAR2) is
BEGIN
   spool on;
   set feedback off;
   set heading off; ​ ​ ​
   set sqlformat csv;
   spool EXPORT_PATH;

   select * from SOURCE; 
   spool off;
END export_to_csv;

1 个答案:

答案 0 :(得分:2)

不,那是行不通的。 SPOOL以及您使用的所有SET命令都是 SQL * Plus

存储过程是PL / SQL,因此-如果要从那里开始,则必须使用UTL_FILE包。结果将在数据库服务器上,而不是本地PC上。


或者:

  • 将这些SPOOL, SET, SELECT,...命令放入数据库服务器上的.SQL文件中
  • 使用DBMS_SCHEDULER软件包创建一个数据库作业,该软件包能够运行操作系统文件。在MS Windows上,您将调用CMD,该文件将使用SQLPLUS可执行文件建立与数据库的连接,并调用.SQL脚本(使用@
  • 就像上一个选项一样,结果将在数据库服务器上,而不是在本地PC上

查看您喜欢的选项。

也许,创建该.SQL文件并将其提供给所有同事,然后再在其PC上运行并在本地获取结果会更简单。