2010-03-20 1 views
0

Когда я создаю каталог с помощью sytem пользователя (vin.txt мой файл)Создание каталога?

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

он создает его.

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

"Identifier is too long" 

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

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

+0

где вы его создадите? используя какое программное обеспечение? sqlplus? – Dani

ответ

1

Почему вы используете double-qoutes?

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


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

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

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

При попытке более короткий путь (CREATE DIRECTORY emp_dir1 As "C:\vin.txt";) Я получаю

ORA-01780: строка обязательна

+0

Я предположил, что это была опечатка, в противном случае она была бы ошибочной, запустив SYSTEM или не – APC

+0

@APC: Угадайте, что вы правы, отредактировал мой ответ. –

1

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

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

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

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

+0

+1, хороший вопрос о безопасности и о 'DIRECTORY', который должен быть, ну, каталог. –