2

sqlplusのテーブルからスプールファイル名の名前を選択するにはどうすればよいですか?

私は次のようなものを持っています:

SPOOL ON
SPOOL XXXXXXXXX.bkp
SELECT * FROM my_table WHERE field1='value';
SPOOL OFF

そして、XXXXXXXXX.bkpにこの同じテーブルのフィールドの値を持たせたい。

よろしく、フェルナンド

4

2 に答える 2

4

SQLPLUS の「new_value」機能を使用して、列の値を sqlplus 変数に保存し、以下のようにスプールできます。

SQL> create table spool_file (
  2       id number,
  3       file_name varchar2(200)
  4  );

Table created.

SQL> insert into spool_file values (1, 'test_spool_123.txt');

1 row created.

SQL> commit;

Commit complete.

SQL> column file_name new_value file_name;
SQL> select file_name from spool_file
  2    where id = 1;

FILE_NAME
--------------------------------------------------------------------------------
test_spool_123.txt

SQL> spool '&file_name';
SQL> select object_id from dba_objects
  2  where rownum < 10;

 OBJECT_ID
----------
        28
        49
        11
         6
         3
        52
        40
        19
        59

9 rows selected.

SQL> spool off;

そして、これが私のスプールファイルの内容です。

SQL> select object_id from dba_objects
  2  where rownum < 10;

 OBJECT_ID                                                                      
----------                                                                      
        28                                                                      
        49                                                                      
        11                                                                      
         6                                                                      
         3                                                                      
        52                                                                      
        40                                                                      
        19                                                                      
        59                                                                      

9 rows selected.

SQL> spool off;

ファイルへの書き込みをより詳細に制御する必要がある場合は、UTL_FILEパッケージとそのサブプログラムを確認することもできます。

于 2011-02-16T21:41:03.673 に答える
2

あなたが何をしようとしているのかは 100% わかりませんが、スプール ファイルに可変ファイル名が必要な場合は、次のようにします。

col dat1 NEW_VALUE v_start_time

select to_char(sysdate,'YYYY-MM-DD_HH24MISS') dat1 from dual;

spool test_script_&v_start_time..txt

/*
other stuff...
*/
spool off

これは、複数の出力ファイルを管理しやすくするためにファイル名にタイムスタンプを追加する、私が持っているスクリプトから取った例です。コマンドの に注意して..くださいspool [filename]

ファイル名に実際のフィールド名が必要だと言っているので、クエリを、すべてのフィールド名を格納する Oracle テーブルに対してクエリを実行するものに変更する必要があります (その名前は今思い出せません)。とても簡単。

于 2011-02-16T21:48:06.867 に答える