Создание каталога? - PullRequest
       13

Создание каталога?

0 голосов
/ 20 марта 2010

Когда я создаю каталог, используя sytem пользователя (vin.txt - мой файл)

create directory emp_dir1 
     AS "'C:\Documents and Settings\Administrator\Desktop\vin.txt'";

создает его.

Когда я делаю то же самое, используя пользователя Scott, выдается ошибка для пути к файлу,

"Identifier is too long"

но когда я помещаю этот путь к файлу в одинарные кавычки вместо двойных кавычек для Скотта, он создает его.

В чем причина?

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Несколько вещей касаются меня по поводу вашего вопроса.

Во-первых, обычные пользователи, такие как SCOTT, не должны создавать каталоги. CREATE ANY DIRECTORY чрезвычайно мощен, потому что он предоставляет права на чтение / запись для любого каталога ОС, доступного для учетной записи oracle; это огромная дыра в безопасности.

Во-вторых, путь к каталогу должен быть просто путем, без файла. Мы создаем файлы, используя UTL_FILE, Data Pump или что-то еще. Вызов UTL_FILE.FOPEN() не удастся, если переданный DIRECTORY фактически является путем к файлу, а не каталогу ОС.

Я не могу объяснить, почему тот же оператор, успешно выполненный SYSTEM, завершается ошибкой при выполнении SCOTT. У меня нет 9i, поэтому я не могу его проверить. Вырежьте и вставьте весь вывод SQL * Plus, чтобы мы могли видеть, что происходит. Как заметил Питер, ваш вопрос, по-видимому, содержит опечатку, поэтому в настоящий момент мы не можем быть уверены, что то, что вы думаете, происходит на самом деле , это , что происходит.

1 голос
/ 20 марта 2010

Почему вы используете двойные квоты?

Строки в Oracle имеют одинарные кавычки, в то время как двойные кавычки могут использоваться вокруг имен столбцов и таблиц.


Я пробовал использовать Oracle 10.2 (у меня нет 9g), и я не могу воспроизвести это. Это никогда не работает, независимо от того, какого пользователя я использую.

Когда длина строки равна вашей, я всегда получаю

ORA-00972: идентификатор слишком длинный

Когда я пробую более короткий путь (CREATE DIRECTORY emp_dir1 As "C:\vin.txt";), я получаю

ORA-01780: требуется строковый литерал

...