【发布时间】:2017-09-05 08:24:46
【问题描述】:
我在下面创建了 sql 脚本,我尝试使用区域和市场对其进行参数化,并将此脚本保存为 wrapper.sql
define zone1= &1.
define market1= &2.
set lines etc
SET ECHO OFF
SET FEEDBACK OFF
SET HEAD OFF
SET LIN 256
SET WRAP OFF
SET PAGES 0
spool H:\extract_&zone1&market1..csv
select 'zone' ||','||
'market' ||','||
'id'
result from dual
union all
select zone ||','||
market ||','||
id
from solution_report
where rownum <5 and zone = &zone1 and market = &market1;
/
spool off
现在我有 23 个与市场相关的区域,我创建了 23 个包装脚本并将其保存在文件 wrapper_script.sql 中。我想针对他们的市场为每个区域生成 23 个 excel 文件。
@C:\Users\raw\Desktop\wrapper.sql As Asia
.
.
.
@C:\Users\raw\Desktop\wrapper.sql AF Africa
但是当我尝试运行这个 wrapper_script.sql 时,它会生成 23 个 csv 文件,但文件中没有数据。我正在使用 oracle sql 开发人员客户端运行此脚本,因为我无权访问 sql plus。
我不确定我是在错误的地方使用了 spool,还是因为我在包装器中传递字符串值而调用它是错误的?
还有其他方法可以优化工作,而不是创建 23 个包装文件。
以下是我的选择查询结果,我相信我必须为区域和市场列格式化字符串。
zone,market,boutique_id
EUR,Belgium,1233
EUR,Portugal,1345
EUR,Portugal,1567
【问题讨论】:
-
我不明白您所说的“创建 23 个包装文件”是什么意思?您有 一个 SQL 脚本,名为
wrapper.sql,您运行 23 次以创建 23 个 CSV 文件 - 我知道这就是您想要的? -
不,我没有创建 23 个包装文件,但我在 wrapper_script.sql 文件中调用了 23 次,这样它将创建 23 个具有不同区域的 csv 文件。如果有可能而不是调用 23 次,我想改进这一点,例如创建动态 sql 查询
-
你可以用
select '@C:\Users\raw\Desktop\wrapper.sql '||zone||' '||market from some_table;这样的代码生成外部脚本
标签: sql oracle csv parameter-passing wrapper