我在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
请查看以上查询并帮助我。 在此先感谢!!!
答案 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