2016-05-19 25 views
-1

エラーを与える私は、Oracle 10gでこのコードを実行したいが、それは私がこれを実行すると、それは私にエラーを与える

ORA-00911:無効な文字

CREATE OR REPLACE DIRECTORY CDATA AS 'D:\'; 
    GRANT READ ON DIRECTORY CDATA TO PUBLIC; 
    DECLARE 
    MYFILE UTL_FILE.FILE_TYPE; 
    type array IS VARRAY(10) OF INTEGER; 
    arr array; 
    temp number; 
    curr number; 
    prev number; 
    n number; 
    BEGIN 
    MYFILE := UTL_FILE.FOPEN('CDATA','FILING.txt','W'); 
     arr := array(98, 97, 78, 87, 92, 33, 12, 45, 45, 66); 
     n:= arr.count; 
     UTL_FILE.PUT(MYFILE, 'ORGANIZED DATA: '); 
      for i in 2..arr.count loop 
      curr:=i; 
      prev:=i-1; 
       while arr(prev) > arr(curr) loop 
         temp:= arr(curr); 
         arr(curr):= arr(prev); 
         arr(prev):= temp; 
         curr:= curr-1; 
         prev:= prev-1; 
        IF curr=1 THEN 
        EXIT; 
        END IF;     
       end loop; 
      end loop; 
     for i in 1.. arr.count loop 
      UTL_FILE.PUT_LINE(MYFILE, arr(i)); 
      dbms_output.put_line(arr(i)); 
     end loop; 
    UTL_FILE.FCLOSE(MYFILE); 
    END;  //ORA-00911: invalid character 
// File is not writting 

ソートされたデータを挿入アルゴリズムからファイルに書き込むことができません

+0

これらのコマンドを実行するためにどのツールを使用していますか? sqlplus? –

+0

@ YaronIdan Oracle 10g –

+1

ご存知のように、質問の件名で、Oracleと対話するために使用しているツールについて質問しています。 –

答えて

0

私はあなたの質問を通常のser。 ORA-00911:無効な文字としてエラーはありませんでした。あなたが実行しているコードごとに期待される別のエラーがありました。スクリプトをdbaユーザーとして実行したとき、エラーはまったくありませんでした。

最初のアプローチ:パブリックユーザーとして作成するディレクトリのラインが実行されたとき、あなたは

"権限が不足"

として最初のエラーになるだろう。 PLSQLスクリプトが実行されたとき、あなたは

を "ディレクトリが存在しません" になるだろう。

これは、ディレクトリ作成および許可スクリプトがdba特権( 'sys'のようなユーザアカウントが所有する特権)で実行する必要があるためです。残りのスクリプト、つまりplsqlブロックはパブリック・ユーザーから実行できます。通常のユーザーはディレクトリの作成と権限の付与がないため、エラーが発生します。

dbaユーザーと一緒に実行する行を許可するようにディレクトリ作成を移動すると、正常に実行され、上記の2つのエラーはなくなります。パブリックユーザーでPLSQLブロックを実行したときに続いて、

「ディレクトリへのアクセスが拒否された」第3の誤りがあるでしょう。これは、あなたの許可スクリプトではディレクトリオブジェクトの読み込みアクセスをpublicにしているのに対し、plsqlブロックでは実際に書き込んでいるからです。それを処理するには、への助成金のスクリプトを修正 -

GRANT READ,WRITE ON DIRECTORY CDATA TO PUBLIC; 

第二のアプローチ あなたのスクリプトはまったくエラーが発生しないだろうdbaユーザーを使用して、PLSQLブロックを含めた全体のスクリプトを実行することができます。

dbaユーザーからディレクトリ作成とスクリプトの実行を実行し、上記のように変更された許可スクリプトを使用して、通常のnondbaユーザーからplsqlブロックを実行することをお勧めします。

関連する問題