2013-11-20 3 views
6

Я пытаюсь экспортировать данные из запроса в файл csv из Oracle Enterprise Express, установленного на компьютере под управлением Windows Server 2008.PLS-00201: идентификатор UTIL_FILE должен быть объявлен

Я нашел решение:

http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:235814350980

, который в основном пишет функцию и использует объект UTIL_FILE для создания и записи в файл и добавить разделители.

я получаю сообщение об ошибке следовать, когда я пытаюсь создать функцию в Oracle SQL Developer:

PLS-00201: identifier UTIL_FILE must be declared. 

Когда я запускаю следующую команду:

select owner, object_type from all_objects where object_name = 'UTL_FILE' 

Результат является:

OWNER  Object Type 
--------- ----------- 
PUBLIC  SYNONYM 

EDIT:

Running:

GRANT EXECUTE ON UTL_FILE TO PUBLIC 

Дает:

Error starting at line 2 in command: 
GRANT EXECUTE ON UTL_FILE TO PUBLIC 
Error report: 
SQL Error: ORA-00942: table or view does not exist 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

В чем проблема?

+1

Подключение в качестве SYS пользователя с правами SYSDBA решил проблему. Я смог выполнить команду GRANT для своего пользователя, тогда у меня были необходимые права –

ответ

1

Пользователи по умолчанию не имеют разрешения на выполнение по UTL_FILE. Чтобы использовать UTL_FILE, пользователь ADMIN или администратор экземпляра должен явно GRANT EXECUTE разрешения на него, например, как в следующем примере:

GRANT EXECUTE ON SYS.UTL_FILE TO scott; 
10

Похож отсутствием привилегий для меня. Часто PUBLIC пользователь имеет EXECUTE привилегию на этот пакет, но привилегия может быть отозвана.

Вы можете проверить, если PUBLIC имеет эту привилегию, выдавая следующий запрос:

SELECT * FROM all_tab_privs WHERE grantee = 'PUBLIC' AND table_name = 'UTL_FILE'; 

Если есть строки не возвращаются, попробуйте, предоставившие выполнить привилегию либо пользователю, вы вошли в качестве или в PUBLIC, как некоторые привилегированного пользователя, например SYS:

GRANT EXECUTE ON SYS.utl_file TO user_name; 

Edit

Вы должны предоставить привилегию при регистрации, например, SYS.

+1

Ошибка, начинающаяся со строки 2 в команде: GRANT EXECUTE ON UTL_FILE TO mobilewalletdb Отчет об ошибке: Ошибка SQL: ORA-00942: таблица или представление не существует 00942. 00000 - «таблица или представление не существует» * Причина: * Действие: –

+0

@KristyWelsh Вы вошли в систему как пользователь 'SYS'? –

+0

нет, я не пользователь SYS. –

2

Помимо возможного отсутствия разрешений, другие ответы покрыли, ваш вопрос говорит об ошибке вы получаете:

PLS-00201: identifier UTIL_FILE must be declared 

Это предполагает, что вы ссылаетесь UTIL_FILE, а не встроенный в пакете UTL_FILE, в вашей функции. Возможно, это была ошибка, которую вы ввели для написания вопроса, но вы использовали его в тексте, так что, возможно, у вас неправильное имя пакета в коде, если вы не просто скопировали и вложили код Тома ,

В любом случае вам понадобятся права выполнения на UTL_FILE, если у вас их уже нет.

+0

Это был опечатка в моем вопросе. Сценарий корректно ссылается на UTL_FILE. Спасибо хоть. –

1

Как пользователь: h_djebli указал в своем комментарии, что вы должны быть подключены как пользователь SYS в первую очередь.

Чтобы сделать это, вы должны быть в вашем домашнем каталоге оракула:

cd $ORACLE_HOME 

Затем выполните:

sqlplus/as sysdba 

SQLPLUS начнется в терминале, и вы будете подключены как SYS пользователь.

Вы можете, наконец, написать команду GRANT в вашей Sqlplus консоли:

GRANT EXECUTE ON SYS.utl_file TO your_db_username; 
Смежные вопросы