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 回答