2016-11-29 4 views
0

Я пытаюсь записать в текстовый файл в oracle pl sql (10 g). Я создал каталог, в котором он существует, но все еще получает недопустимый путь. ниже - код.Неверный путь при попытке записать файл в pl sql

CREATE DIRECTORY test_dir AS 'c:\'; 
-- CREATE DIRECTORY test_dir AS '/tmp'; 

DECLARE 
    fileHandler UTL_FILE.FILE_TYPE; 
BEGIN 
    fileHandler := UTL_FILE.FOPEN('test_dir', 'test_file.txt', 'W'); 
    UTL_FILE.PUTF(fileHandler, 'Writing TO a file\n'); 
    UTL_FILE.FCLOSE(fileHandler); 
EXCEPTION 
    WHEN utl_file.invalid_path THEN 
    raise_application_error(-20000, 'ERROR: Invalid PATH FOR file.'); 
END; 
/

the following is the error: 
* 
ERROR at line 1: 
ORA-20000: ERROR: Invalid PATH FOR file. 
ORA-06512: at line 9 
+2

ли база данных работает на том же компьютере, что и каталог? Общей ошибкой является попытка заставить utl_file на удаленном сервере базы данных читать файл на вашем локальном рабочем столе. –

+0

yes robert Я пытаюсь использовать этот скрипт на своем рабочем столе – bugsbunny

+0

Хорошо, но база данных фактически работает на вашем настольном ПК, или это где-то на отдельном сервере базы данных? –

ответ

2

Оракул чувствителен к регистру. Но все имена в SQL и PL/SQL автоматически преобразуются в верхний регистр, если они не заключены в двойные кавычки.

Итак:

CREATE DIRECTORY test_dir AS 'c:\'; 

фактически выполняется как:

CREATE DIRECTORY TEST_DIR AS 'c:\'; 

Поэтому каталог, который вы определили называется TEST_DIR. Если вы ссылаетесь на него в строке (в отличие от имени символа в SQL или PL/SQL), вы должны использовать 'TEST_DIR'. 'test_dir' не будет работать.

Таким образом, попробуйте:

fileHandler := UTL_FILE.FOPEN('TEST_DIR', 'test_file.txt', 'W'); 
+0

благодарит за помощь – bugsbunny