oracle假脱机查询

时间:2009-08-14 06:16:32

标签: oracle spool

我在unix框上写了名为 cashload.txt 的sql并将其保存在unix框的以下位置:

exit |sqlplus -s batch/password@SW_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt

在cashload.txt中写下以下代码:

spool /Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv
select accountnumber||','||accountname||','||X from HSBC_Cash_OIbyAccount_v;
spool off

但它没有在上面提到的路径上假设结果集。但是,当我给出保存脚本的路径时,它正在该位置假脱机。我不明白为什么?它正在假脱机保留 cashload.txt (sql脚本)的路径:

**spool /soft/checkfree/AccurateNXG/scripts/Rep_OIbyAccount.csv**
select accountnumber||','||accountname||','||X from HSBC_Cash_OIbyAccount_v;
spool off

请查看以上查询并帮助我。 在此先感谢!!!

6 个答案:

答案 0 :(得分:2)

如果我理解正确,DATE_FILE是一个shell变量,您想要替换为假脱机文件名。这可能是您的部分或全部问题。我认为你不能直接从SQLPlus引用它。您需要将其作为参数传递给脚本,然后将其作为SQLPlus替换变量引用。

所以命令行是:

sqlplus -s batch/password@SW_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt $DATE_FILE

脚本中的spool命令为:

spool /Detail/reports/inner/SW/Rep_OIbyAccount_&1..csv

(额外的时间段是必要的,因为它充当了变量变量名的终结符。)

答案 1 :(得分:1)

几乎可以肯定,这是一个文件权限问题。请记住,当我们从数据库内部与操作系统交互时,我们使用的是oracle帐户,而不是我们连接的帐户。

oracle帐户在/ Detail / reports / inner上有写权限吗?

答案 2 :(得分:0)

你能否回应“/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv”的价值?

我能想到的唯一理由是  a)上述位置不是有效路径  b)您无权写入该位置。

你是在第一种情况下得到错误,还是什么也没发生?

答案 3 :(得分:0)

没有静默(-s)选项的运行是否会为您提供更多详细信息?

答案 4 :(得分:0)

您提到的路径有$符号导致问题。为了避免这种情况,只需在" "中提供路径和文件名。这应该可以解决问题:

SPOOL "/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv "

答案 5 :(得分:0)

也许您可以尝试以下操作来查看它是否产生了所需的输出。它将放在您当前所在的目录中。

set termout  off
set echo     off
set linesize 140
set feedback off
set pagesize 0

spool DATE_FILE.csv
select accountnumber
       ||','
       ||accountname
       ||','
       || X 
  from HSBC_Cash_OIbyAccount_v;
spool off
ed DATE_FILE.csv