如何在SQL Plus / SQL-PL中使用迭代或作为函数运行查询?

SQL Plus的新增功能,对迭代和函数如何使用它有些困惑。希望有人可以向我展示如何使用以下脚本进行操作:

set embedded on
set echo off
set colsep,set pagesize 0
set linesize 1000
set numwidth 10
set headsep off
spool <my_file_path>.csv;
select * from (select /*csv*/ row_number() over (order by t.objectid) as id,t.objectid as transformer_id,t.gps_x as lon,t.gps_y as lat,s.electricmeternumber,s.serviceindex,s.accountnumber,case 
     when t.phasedesignation = 0 then 'unknown'
     when t.phasedesignation = 1 then 'C'
     when t.phasedesignation = 2 then 'B'
     when t.phasedesignation = 3 then 'BC'
     when t.phasedesignation = 4 then 'A'
     when t.phasedesignation = 5 then 'AC'
     when t.phasedesignation = 6 then 'AB'
     when t.phasedesignation = 7 then 'ABC'
     end as phase_designation
from mvtransformer t,vservicepoint_meterinfo s 
where t.objectid = s.transformerobjectid) where id > some value x and id <= some value x;
spool off; 

所以我要做的是重复此脚本多次,每次更改x和文件路径。在SQL Plus中执行此操作的最佳方法是什么?

谢谢!

lonewolfhunt 回答:如何在SQL Plus / SQL-PL中使用迭代或作为函数运行查询?

您可以声明一些替换变量,将查询放入自己的脚本中,然后在填充相关变量后多次调用该脚本。

例如像这样:

多次调用的脚本:

spool &&filename..csv;

SELECT *
FROM   (SELECT /*csv*/
               row_number() over(ORDER BY t.objectid) AS id,t.objectid AS transformer_id,t.gps_x AS lon,t.gps_y AS lat,s.electricmeternumber,s.serviceindex,s.accountnumber,CASE
                 WHEN t.phasedesignation = 0 THEN 'unknown'
                 WHEN t.phasedesignation = 1 THEN 'C'
                 WHEN t.phasedesignation = 2 THEN 'B'
                 WHEN t.phasedesignation = 3 THEN 'BC'
                 WHEN t.phasedesignation = 4 THEN 'A'
                 WHEN t.phasedesignation = 5 THEN 'AC'
                 WHEN t.phasedesignation = 6 THEN 'AB'
                 WHEN t.phasedesignation = 7 THEN 'ABC'
               END  AS phase_designation
              FROM   mvtransformer           t,vservicepoint_meterinfo s
              WHERE  t.objectid = s.transformerobjectid)
WHERE  id > &&val1
AND    id <= &&val2;
spool off; 

调用脚本

set embedded on
set echo off
set colsep,set pagesize 0
set linesize 1000
set numwidth 10
set headsep off

define val1=10
define val2=20
define filename=your_filename1

@script_to_loop_over

define val1=30
define val2=40
define filename=your_filename2

@script_to_loop_over

...

.用于指示SQL * Plus中替换变量名称的结尾。看起来您正在使用SQL Developer / SQLCli,它可能会或可能不会与SQL * Plus相同。如果不是,则需要使用spool &&filename.csv

本文链接:https://www.f2er.com/2962061.html

大家都在问