将PLSQL过程的输出提取到我的笔记本电脑的本地驱动器

时间:2016-11-10 08:49:13

标签: oracle plsql oracle-sqldeveloper extraction

我在sqldeveloper中有一个数据库连接服务器" server_dev"

现在我想创建一个程序,其输出可以直接保存在csv文件中,以便稍后在笔记本电脑的本地驱动器中进行数据比较。

所以我尝试使用UTL_FILE oracle包但是当我运行该程序时,UTL_FILE试图写入服务器" server_dev" 的文件,而我没有任何访问权限该服务器因此该命令不起作用。 例如:代码是: -

CREATE OR REPLACE PROCEDURE export_to_csv_test
IS
v_file     UTL_FILE.file_type;
v_string   VARCHAR2 (4000);
CURSOR c_contexts
IS
SELECT workspace_id,context_id from contexts where rownum<5;

BEGIN
v_file :=
UTL_FILE.fopen ('Z:\My_Project_knowledge\CSVDIR', 'empdata.csv','w',1000);
FOR cur IN c_contexts

`enter code here`LOOP

v_string :=

cur.workspace_id

|| ','

|| cur.context_id;

UTL_FILE.put_line (v_file, v_string);

END LOOP;

UTL_FILE.fclose (v_file);
END;

for calling it :-
BEGIN
export_to_csv_test;
END;

Error report:
ORA-29280: invalid directory path
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at "RAY_DEV07_OWNER.EXPORT_TO_CSV_TEST", line 20
ORA-06512: at line 3
29280. 00000 -  "invalid directory path"
*Cause:    A corresponding directory object does not exist.
*Action:   Correct the directory object parameter, or create a corresponding
           directory object with the CREATE DIRECTORY command.

所以,我对它进行了分析,发现我的SQL开发人员已连接到服务器到我当地的机器上,因为我的办公室笔记本电脑无法改变它。

我可以通过其他任何方式将我的存储过程的输出保存到文本或Csv文件中的本地驱动器吗?

2 个答案:

答案 0 :(得分:0)

要将文件写入本地计算机,您可以使用dbms_output;例如在SQLPlus中:

SQL> set feedback off
SQL> set echo off
SQL> set serveroutput on
SQL> spool d:\spool.txt
SQL> begin
  2      for i in (select level from dual connect by level <= 5) loop
  3          dbms_output.put_line('Level ' || i.level);
  4      end loop;
  5  end;
  6  /

将生成文件d:\ spool.txt:

Level 1
Level 2
Level 3
Level 4
Level 5

答案 1 :(得分:0)

如果您可以直接从表或表函数中选择,那么SQL * Plus 12.2的新SET MARKUP CSV选项将非常有用。它不会对查询输出进行分页,而是生成CSV。完整语法是

SET MARKUP CSV {ON|OFF} [DELIMI[TER] character] [QUOTE {ON|OFF}]

如果使用sqlplus -m选项打开此模式,则输出生成速度会更快。

它对查询JSON类型也很有用。见https://blogs.oracle.com/opal/entry/fast_generation_of_csv_and