如何从基于输入的单个SQL文件中缓冲file1或file2?
问题描述:
我有类似下面的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
答
什么是启动此spool.sql?一个shell脚本?数据库功能?
如果它是一个shell脚本,我可以为这个脚本使用一个参数或者将它分成两个单独的.sql文件并调用相应的参数。
您也可以在调用此脚本之前将文件值保存到临时表中,然后在将文件假脱机之前将其选中。
有很多选项,但这一切取决于您如何调用此脚本以及您希望如何扩展。
答
最简单的方法是动态地使用所提供的参数作为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信箱名称)
它被从shellcript调用。我编辑了我的问题来包括这个。此外,我想要在同一个SQL文件中累积两个查询,因为在真正的问题中,有很多这样的SQL查询,我无法为它们中的每一个创建不同的文件。 – Mistu4u