2017-09-14 51 views
0

我有类似下面的SQL文件:如何从基于输入的单个SQL文件中缓冲file1或file2?

SET ECHO OFF 
set feed off 
set verify off 
set head off 
set pagesize 0 
set space 0 
set trimspool on 
set line 250 
spool subir.rpt 

select 'Subir' from dual; 
spool off 

SET ECHO OFF 
set feed off 
set verify off 
set head off 
set pagesize 0 
set space 0 
set trimspool on 
set line 250 
spool vishal.rpt 

select 'vishal' from dual; 
spool off 

让我们把这个文件spool.sql。我需要启用基于输入的spool.sql文件接收的spool文件的创建。例如,如果它接收到“subir.rpt”,应该运行SQL文件的第一部分并生成subir.rpt;如果它是vishal.rpt,则应该运行第二部分,并生成vishal.rpt。

这是如何实现的?

编辑:此SQL文件正从shell脚本中调用。 shellScript如下所示:

sqlplus -s dbread$HOST_CONNECT_STR/dbread<<endplus 
@spool.sql 
endplus 

回答

0

什么是启动此spool.sql?一个shell脚本?数据库功能?

如果它是一个shell脚本,我可以为这个脚本使用一个参数或者将它分成两个单独的.sql文件并调用相应的参数。

您也可以在调用此脚本之前将文件值保存到临时表中,然后在将文件假脱机之前将其选中。

有很多选项,但这一切取决于您如何调用此脚本以及您希望如何扩展。

+0

它被从shellcript调用。我编辑了我的问题来包括这个。此外,我想要在同一个SQL文件中累积两个查询,因为在真正的问题中,有很多这样的SQL查询,我无法为它们中的每一个创建不同的文件。 – Mistu4u

0

最简单的方法是动态地使用所提供的参数作为spoolfile信箱:

set echo off 
set feed off 
set verify off 
set head off 
set pagesize 0 
set space 0 
set trimspool on 
set line 250 

spool &1 

spool 

select 'Subir' from dual where '&1' = 'Subir.rpt'; 

select 'vishal' from dual where '&1' = 'vishal.rpt'; 

spool off 

(对自己的spool命令直接打印用于演示目的当前spoolfile信箱名称)

相关问题