2017-04-26 35 views
0

一部の文字列をtxtファイルに書き込もうとしていますが、V_OUT_FILEを宣言する必要がありますが、ブロックの宣言セクションで宣言しました。助言がありますか?PLS-00201:識別子 'V_OUT_FILE'を宣言する必要があります

CREATE OR REPLACE DIRECTORY CTEST AS 'C:\Users\myUser\Desktop'; 
GRANT WRITE ON DIRECTORY CTEST TO PUBLIC 

DECLARE 
    v_out_File UTL_FILE.FILE_TYPE; 
BEGIN 
    v_out_File := UTL_FILE.FOPEN('CTEST', 'IO.txt' , 'W'); 

    UTL_FILE.PUT_LINE(v_out_File , 'Hi this is text file! \n'); 
    UTL_FILE.PUT_LINE(v_out_File , 'Hi this is line 2! \n'); 
    UTL_FILE.FCLOSE(v_out_File); 
END; 
+0

はOK実行取得

CREATE OR REPLACE DIRECTORY CTEST AS 'C:\Users\myUser\Desktop'; GRANT WRITE ON DIRECTORY CTEST TO PUBLIC; DECLARE v_out_File UTL_FILE.FILE_TYPE; BEGIN v_out_File := UTL_FILE.FOPEN('CTEST', 'IO.txt' , 'W'); UTL_FILE.PUT_LINE(v_out_File , 'Hi this is text file! \n'); UTL_FILE.PUT_LINE(v_out_File , 'Hi this is line 2! \n'); UTL_FILE.FCLOSE(v_out_File); END; / 

。読取り権限しか与えられていないディレクトリに書込みしようとしている場合を除き、ブロックを所有者(SYS)として実行している場合を除き、ORA-29289がスローされます。 –

+0

@AlexPoole私は書き込むように変更しましたが、それと同じ例外があります – Safwat

+1

投稿したコードをコピーして貼り付けると、正常に完了します。あなたは何か違うものを走っているか、あなたが言わなかったことがあります。 (セミコロンがないため、PLS-00201ではなくORA-29289を与えるため、このグラントはSQL¥* Plusで実行されません)。 –

答えて

4

問題が実際にgrant文​​の末尾にセミコロンです: は、ここに完全なブロックです。それはあなたが言及していなかったORA-00933を投げます。その文は正しく終了していないため、DECLAREと、宣言の最後の最初のセミコロンまでのすべてが、そのレポートの一部として扱われます(SQL Developerのエラー・レポート)。

Directory CTEST created. 


Error starting at line : 2 in command - 
GRANT WRITE ON DIRECTORY CTEST TO PUBLIC 

DECLARE 
    v_out_File UTL_FILE.FILE_TYPE 
Error report - 
ORA-00933: SQL command not properly ended 
00933. 00000 - "SQL command not properly ended" 
*Cause:  
*Action: 

これは、ネストステートメントがBEGINから始まり、実際にはコンパイラに関する限りDECLAREセクションであることを意味します。再び、それはエラーレポートに示されています:あなたが不足しているセミコロンを追加した場合

Error starting at line : 6 in command - 
BEGIN 
    v_out_File := UTL_FILE.FOPEN('CTEST', 'IO.txt' , 'W'); 

    UTL_FILE.PUT_LINE(v_out_File , 'Hi this is text file! \n'); 
    UTL_FILE.PUT_LINE(v_out_File , 'Hi this is line 2! \n'); 
    UTL_FILE.FCLOSE(v_out_File); 
END; 
Error report - 
ORA-06550: line 2, column 3: 
PLS-00201: identifier 'V_OUT_FILE' must be declared 
... 

は、それが動作します:あなたが投稿している何

Directory CTEST created. 


Grant succeeded. 


PL/SQL procedure successfully completed. 
+0

素晴らしい答えが問題を解決しましたが、 Windowsファイルシステム内の任意のディレクトリにアクセスすると助けますか? – Safwat

+0

私はWindowsであまり働かない。私は、Oracleサービスが実行している資格情報は、個人のホームディレクトリのデスクトップフォルダにアクセスできないと思う。もっとパブリックフォルダに変更して、それがより幸せかどうか確認できますか? –

+0

Dドライブのフォルダにアクセスしようとしましたが、アクセスが拒否されました – Safwat

関連する問題