0

我已经在 unix box 上按名称cashload.txt编写了 sql,并将其保存在 unix box 上的以下位置:

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

请查看上面的查询并帮助我。提前致谢!!!

4

6 回答 6

2

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

所以命令行将是:

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

脚本中的假脱机命令将是:

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

(额外的句点是必要的,因为它充当替换变量名称的终止符。)

于 2009-08-14T12:41:06.310 回答
1

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

那么 oracle 帐户是否对 /Detail/reports/inner 具有写入权限?

于 2009-08-14T06:42:49.147 回答
0

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

于 2009-08-14T06:42:03.923 回答
0

您提到的路径有一个$导致问题的符号。为避免这种情况,只需在" ". 那应该可以解决问题:

SPOOL "/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv "
于 2010-09-17T19:29:06.283 回答
0

你能回显“/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv”的值吗?

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

在第一种情况下您是否遇到错误,或者根本没有发生任何事情?

于 2009-08-14T06:25:18.933 回答
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
于 2016-04-02T18:08:26.100 回答