2016-11-10 4 views
0

У меня есть сервер подключения базы данных «server_dev» в sqldeveloper.Извлечение вывода из процедуры PLSQL на локальный диск моего ноутбука

Теперь я хочу создать процедуру, выход которой можно непосредственно сохранить в файле csv для сравнения данных позже на локальном диске моего ноутбука.

Так я пробовал использовать пакет UTL_FILE оракула, но когда я побежал ПРОЦЕДУРУ UTL_FILE пытался написать в файле сервер «server_dev» тогда я не имею никакого доступа к этому серверу, следовательно, этой команде Isnt работы. , например: код: -

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-файле?

+3

Пожалуйста, внесите свой код. Кроме того, если вы хотите сохранить что-то на своей клиентской машине, вы можете взглянуть на [dbms_output] (http://docs.oracle.com/database/121/ARPLS/d_output.htm#ARPLS036). – Aleksej

+0

База данных, к которой вы подключаетесь, установлена ​​отдельно или на вашей машине? – Kacper

+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 
+0

Спасибо, но это будет работать в SQL Developer версии 3.2.20.09? –

+0

Для этой команды я получаю файл золотника, как: -> НАЧАТЬ ДЛЯ I В (SELECT уровень FROM DUAL CONNECT BY уровня <= 5 ) LOOP dbms_output.put_line ('Level' || i.level); END LOOP; END; Уровень 1 Уровень 2 Уровень 3 Уровень 4 Уровень 5 как я могу получить только выход не процедура? –

+1

Возможно, вам придется добавить ['set echo off'] (http://docs.oracle.com/database/121/SUTIL/GUID-D45E2B5E-B70C-49E1-BE46-6B58DBABE220.htm#SUTIL1515) – Aleksej

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

 Смежные вопросы

  • Нет связанных вопросов^_^