2013-11-20 76 views
6

我試圖將數據從查詢導出到安裝在Windows Server 2008計算機上的Oracle Enterprise Express的csv文件中。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 

編輯:

運行:

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

連接與SYSDBA權限的SYS用戶已經解決了這個問題。我能夠在我的用戶上執行GRANT命令,然後我具有所需的權限 –

回答

1

默認情況下,用戶在UTL_FILE上沒有執行權限。要使用UTL_FILE,管理員用戶或實例管理員必須明確授予執行它的權限,比如下面的例子:

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; 

編輯

您必須在登錄時授予該特權,例如SYS用戶。

+1

錯誤從命令行中的第2行開始: 將UTL_FILE的執行權移交給mobilewalletdb 錯誤報告: SQL錯誤:ORA-00942:表或視圖確實不存在 00942. 00000 - 「表或視圖不存在」 *原因: *操作: –

+0

@KristyWelsh您是否以「SYS」用戶身份登錄? –

+0

不,我不是SYS用戶。 –

2

除了可能缺乏權限,其他的答案已經覆蓋的,你的問題說,你得到的錯誤是:

PLS-00201: identifier UTIL_FILE must be declared 

表明您已經引用UTIL_FILE,而不是內置的包UTL_FILE,在你的功能。當然,這可能是你介紹編寫問題時的一個錯誤,但是你也可以在文本中使用它,所以如果你不只是複製和粘貼Tom的代碼,那麼你的代碼中的軟件包名稱可能是錯誤的。

無論如何,您仍然需要在UTL_FILE上擁有執行權限,如果您還沒有它們的話。

+0

這是我的問題中的一個錯字。該腳本正確引用UTL_FILE。謝謝,不過。 –

1

作爲用戶:h_djebli在他的評論中指出,您首先需要以SYS用戶身份進行連接。

要做到這一點,你必須在你的Oracle主目錄:

cd $ORACLE_HOME 

然後執行:

sqlplus/as sysdba 

的sqlplus會在你的終端開始,您就可以連接爲SYS用戶。

你終於可以在你的sqlplus控制檯寫的GRANT命令:

GRANT EXECUTE ON SYS.utl_file TO your_db_username; 
相關問題