我试图在一个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;
答案 0 :(得分:2)
不,那是行不通的。 SPOOL
以及您使用的所有SET
命令都是 SQL * Plus 。
存储过程是PL / SQL,因此-如果要从那里开始,则必须使用UTL_FILE
包。结果将在数据库服务器上,而不是本地PC上。
或者:
SPOOL, SET, SELECT
,...命令放入数据库服务器上的.SQL文件中DBMS_SCHEDULER
软件包创建一个数据库作业,该软件包能够运行操作系统文件。在MS Windows上,您将调用CMD
,该文件将使用SQLPLUS
可执行文件建立与数据库的连接,并调用.SQL脚本(使用@
)查看您喜欢的选项。
也许,创建该.SQL文件并将其提供给所有同事,然后再在其PC上运行并在本地获取结果会更简单。