2017-09-14 52 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信箱名稱)

相關問題