【问题标题】:parameterized sql script using wrapper使用包装器的参数化 sql 脚本
【发布时间】: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


【解决方案1】:

您需要在脚本中使用&amp;1.&amp;2. 来引用第一个和第二个命令行参数。您可以立即将它们分配给命名变量,如下所示:

define zone1 = &1.
define market1 = &2.

末尾的. 是可选的,但我更喜欢始终使用它以避免在某些情况下产生歧义。

【讨论】:

  • 它现在生成文件,但扩展名为 .lst,我不知道原因。而且文件中也没有数据
  • .lst 是默认扩展名,如果您不提供。而且你还没有因为在extract_&amp;zone1&amp;market1.csv 的变量末尾没有.(这就是我所说的歧义):如果 zone1='xxx' 那么这变成了没有扩展名的extract_&amp;zone1xxxcsv所以 Oracle 添加了默认值。将代码更改为extract_&amp;zone1&amp;market1..csv
  • 不知道为什么没有数据。
  • 感谢它现在生成的 csv 文件。但只是一个小问题,当我只运行选择查询它返回值时。您是否知道我在错误的地方使用了 spool,或者我在包装器中传递字符串值时调用它是错误的?
  • 如果它们是字符串,那么你需要引用它们:zone = '&amp;zone1.' and market = '&amp;market1.'
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多