2016-11-11 97 views
5

我已经创建了一大段脚本,它将最后一行的新行插入我的目标表中。在一个循环中运行一个大的oracle SQL脚本

脚本包含许多SELECT语句和临时表。

我想循环它连续运行2000次,并不能看到比F5推2000次任意选择。

是否有一个的Oracle SQL相当于包裹代码到SAS宏和循环它2000倍?

+2

Oracle有一个'FOR'循环就像大多数编程语言。检查文档或[这里](https://www.techonthenet.com/oracle/loops/for_loop.php)。 –

+3

@EdGibbs - Oracle SQL不是您所说的“编程语言”。 SQL中通常没有FOR循环,特别是在Oracle中。相比之下,Oracle和其他数据库一样,具有紧密集成的过程语言PL/SQL。您的文档链接是PL/SQL中的FOR循环,而不是Oracle SQL中的。 – mathguy

+0

你搜索了什么?我只是Google搜索“用SAS脚本包装Oracle SQL”,并且从我所知道的情况来看,有些解决方案可以为理解SAS的人提供。 – mathguy

回答

2

PL/SQL匿名块最好是在这种情况:

BEGIN 
    FOR i IN 1..2000 LOOP 
     -- Insert scripts go here 
    END LOOP 
END; 
/
0

你可以尝试插入语句转换成纯SQL?这是加载大量数据的最快和最干净的方法。

一旦你的设置,然后row_source代可以通过笛卡尔产区完成的结果集。

例如:假设一开始你的表有以下

EmpNo, EmpName, Sal 
1000 , Mark , 500 
1001 , Jorja , 100 

我希望生成的表的内容,然后3次我会做以下

insert into emp 
select (select max(empno) 
      from emp 
     )+lvl as empNo 
     , empName 
     , Sal 
    from emp 
    join (select level as lvl 
      from dual 
     connect by level<=3 
     )row_source_generation 
    on 1=1; 

这会给下面的输出

EmpNo, EmpName, Sal 
1000 , Mark , 500 
1001 , Jorja , 100 
1002 , Mark1 , 500 
1003 , Jorja1 , 100 
1004 , Mark2 , 500 
1005 , Jorja2 , 100 
1006 , Mark3 , 500 
1007 , Jorja3 , 100 
相关问题