背景:客戶提出一個需求,寫SQL腳本的時候,內容是拼接的,如何將這個拼接SQL執行的結果取出來調用執行呢?
我想到的方案是先把結果取出來,存為一個中間文件,再調用該文件即可。
知識點:如何將sqlplus結果中的無關信息都去掉?
可以使用sqlplus -s進入調用拼接SQL腳本,腳本中配合使用set設定相關屬性即可實現。下面舉一個簡單的示例來說明:
1.拼接SQL腳本
我這里拿拼接一個殺掉業務用戶JINGYU的所有會話舉例:[oracle@db10 ~]$ cat test.sql
--format
set heading off
set echo off
set flush off
set feedback off
set pagesize 9999
set linesize 9999
set long 9999
--SQL
--kill_all_session
select 'alter system disconnect session '''||sid||','||serial#||''''||' immediate;' from v$session where username = 'JINGYU';
--exit
exit
2.生成中間文件
調用上面的拼接SQL腳本,生成中間文件exec.sql:[oracle@db10 ~]$ sqlplus -s / as sysdba @test.sql > exec.sql
此時查看生成的sql文件,可以確認沒有其他內容,滿足直接后期調用執行的要求:
[oracle@db10 ~]$ cat exec.sql
alter system disconnect session '148,48' immediate;
alter system disconnect session '159,83' immediate;
3.調用中間文件
我這里直接執行調用中間文件驗證,根據你的需求也可以將其封裝到另一個腳本中。[oracle@db10 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 17 12:01:12 2018
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SYS@orcl> @exec
System altered.
System altered.
SYS@orcl>