如何从 sqlplus 中的表中选择我的假脱机文件名的名称?
我有类似的东西:
SPOOL ON
SPOOL XXXXXXXXX.bkp
SELECT * FROM my_table WHERE field1='value';
SPOOL OFF
并希望 XXXXXXXXX.bkp 具有来自同一个表的字段的值。
问候, 费尔南多
您可以使用 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包及其子程序。
我不是 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 表(我现在不记得它的名称),但这应该是相当容易。