Oracle PL/SQL Conditional SPOOL(非空)

vyu0f0g1  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(99)

有没有一种方法,我不假脱机文件的基础上的标准?下面的代码将SPOOL一个空文件,这是没有用的。

VARIABLE :SPOOLYN AS VARCHAR2(1);
DECLARE
    VARSPOOL CHAR ( 1 ) := '&SpoolYN';
BEGIN
    :SPOOLYN := VARSPOOL;
END;

** Some sort of IF condition based on variable :SPOOLYN **
SPOOL "File.txt";
 -- Including all Data to be SPOOLed and SPOOL OFF;

** End of IF condition **
de90aj5v

de90aj5v1#

由于SPOOL是一个SQLPlus命令,因此这将是一个SQLPlus问题,而不是PL/SQL。一般来说,这没什么大不了的,人们只是什么也不处理,因为大多数shell脚本都是基于行的,所以没有行就不起作用。或者他们删除文件,或者简单地跳过在shell脚本中进一步做的任何事情。
SQLPlus本身没有条件逻辑。但是,它确实允许动态替换,并且可以用作有条件的解决方案:

spool_data.sql:

spool file.txt
select ...
spool off

donothing.sql:[空-这只是为了避免在输入N时收到错误消息]
主脚本:

VARIABLE SPOOLYN VARCHAR2(1);

DECLARE
    VARSPOOL CHAR ( 1 ) := '&SpoolYN';
BEGIN
    :SPOOLYN := VARSPOOL;
END;
/

column x new_value spoolme

select DECODE(:spoolyn,'Y','spool_data','donothing') x from dual;

@&&spoolme

exit

在提示符处提供Y,它将调用spool_data.sql脚本,该脚本将假脱机file.txt。提供N,它调用空的donothing.sql脚本,什么也不做。但这种尴尬的变通方法可能不值得。在我看来,空文件更容易使用。我们应该接受SQLPlus是一个命令行接口,而不是一种编程语言,并将我们的条件逻辑保留在PL/SQL或shell中。

相关问题