web-dev-qa-db-ja.com

Oracle PL / SQLを使用してテキストファイルを変更する

テキストファイル内の文字列を開いて、次の手順で置き換えようとしています。

BEGIN
v_file_name := 'text_file.txt';
v_filehandle := utl_file.fopen(v_file_dir, v_file_name, 'W');
v_id_nextval := v_id_nextval + 1;
BEGIN
LOOP
    utl_file.get_line(v_filehandle, v_new_line);
    v_new_line := replace(v_new_line, 30690, v_id_nextval);
    EXIT WHEN v_new_line IS NULL;
  END LOOP;
END;
utl_file.fclose(v_filehandle);

問題は、この手順の実行後、テキストファイルが空になることです。で「W」を「R」に置き換えると、

v_filehandle := utl_file.fopen(v_file_dir, v_file_name, 'W');

変数の値は正しく置き換えられますが、テキストファイルには読み取りアクセス権しかないため、変更は行われません。

私は何か間違ったことをしていますか、それともまったく不可能ですか?

PS:私はOracle 9iを使用しています。

よろしく。

2
Luke Skywalker

はい、「W」はそれを行います-ファイルを置き換えます。追加するには「A」を使用します。 「その場で変更」できるとは思いません。ファイルを新しいファイルにコピーして、必要な変更を加え、元のファイルを削除してから、コピーの名前を変更する必要がある場合があります。

これらすべてが、なぜPL/SQLでこれをすべて実行しようとしているのかという疑問を投げかけます。例えばPythonで書かれた外部プログラムでそれを実行し、それを呼び出す方が、確かに簡単でしょう)。

2
Colin 't Hart