我对 Oracle Develop PL/SQL 语言非常陌生(所以请原谅理解有限)。我正在尝试使用
spool
命令根据表行值动态创建文件名。
下面是
FruitCost
表。我想为每一行创建一个 CSV 文件。例如
id | 名字 | 最低价格 | 最高价格 |
---|---|---|---|
10 | 苹果 | 2.5 | 4.5 |
11 | 橙色 | 1.0 | 2.5 |
12 | 香蕉 | 0.5 | 1.5 |
经过 Stackoverflow 的努力和大力帮助,我想出了下面的脚本,但它不起作用。我尝试使用替代变量并将绑定变量分配给替代变量。
begin
for r in (select * from fruitCost)
Loop
var id number(6)
var name varchar2(10)
begin
:id := r.id;
:name := r.name;
end;
column test new_value s_id noprint
select :id test from dual;
column test new_value s_name noprint
select :name test from dual;
spool \&s_id || '_' || &name..csv
/* query */
spool off;
end loop;
end;
我在 Windows 10 上使用 SQL Developer v.22.2。请提供帮助。 谢谢你。
您可以根据您的要求使用以下脚本,该脚本将创建标题,然后以 csv 格式假脱机列
set pages 0
set lines 500
set trimspool on
set feedback off
set echo off
spool E:\temp_script.sql
prompt set pages 0
prompt set lines 500
prompt set trimspool on
prompt set feedback off
prompt set echo off
set colsep ,
select distinct 'spool '||id||'_'||name||'.csv' || chr(10)
|| ' select ''id'',''name'',''minprice'',''maxprice'' from dual;'||chr(10)||' select * from fruitCost where id = '''
|| id ||''''|| ' and name='''||name ||''''||' order by id,name;' || chr(10)
from fruitCOst;
prompt spool off
spool off
@E:\temp_script.sql