我的代码如下 -
set define on;
set spool on;
set SQLFORMAT csv;
set fpath = &folderpath;
spool @fpath/mycsvfile1.csv
select * from I_PTY;
spool off;
spool @fpath/mycsvfile2.csv
select * from I_LEG;
spool off;
我想将folderpath
值传递为'C:\Documents\Spool'
。
并使用此值传递给变量fpath
,以便第5行传递的值等于'C:\Documents\Spool\mycsvfile1.csv'
但是,我收到的错误是: Unknown set option "fpath"
。
我哪里出错了?请帮助。
答案 0 :(得分:0)
“set”应该是“define”
答案 1 :(得分:0)
你可以用两种方式做到这一点:
直接在假脱机命令中使用&&folderpath
,例如:
set spool on;
set sqlformat csv;
spool &&folderpath/mycsvfile1.csv
select * from i_pty;
spool off;
spool &&folderpath/mycsvfile2.csv
select * from i_leg;
spool off;
或使用DEFINE分配值(您必须以与上一个答案相同的方式引用该值,因此您不会获得任何收益,真的......):
set spool on;
set sqlformat csv;
define fpath = &folderpath
spool &&fpath/mycsvfile1.csv
select * from i_pty;
spool off;
spool &&fpath/mycsvfile2.csv
select * from i_leg;
spool off;
使用双和号会阻止Oracle在每次引用相同的替换变量时提示您输入值。如果您希望再次提示您的下一个脚本或下一次运行此脚本以获取folderpath的值,那么您需要在脚本末尾包含undefine folderpath
(可能还有undefine fpath
)。
此外,您可能希望在脚本的顶部加入set verify off
。
N.B。你在你的假脱机文件名中使用@ - 那里没有位置。它仅在您运行脚本时使用。
答案 2 :(得分:0)
尝试:
spool &folderpath./mycsvfile2.csv
我的代码示例:
spool c:\temp\SQL_Details_Report_&FILE_NAME..html