2016-11-11 10 views
5

最後に新しい行をターゲット表に挿入する大きなスクリプトを作成しました。ループ内で大きなoracle SQLスクリプトを実行

スクリプトには多くのSELECT文と暫定テーブルが含まれています。

私は2000回連続して実行するようにループしたいので、f5 2000回押す以外の方法はありません。

SASマクロにコードをラップして2000回ループするというOracle SQLの同等性はありますか?

+2

Oracleにはほとんどのプログラミング言語と同様に「FOR」ループがあります。ドキュメントまたは[こちら](https://www.techonthenet.com/oracle/loops/for_loop.php)を確認してください。 –

+3

@EdGibbs - Oracle SQLは、あなたがそれを意味する "プログラミング言語"ではありません。一般的にはSQLに、特にOracleにはFORループはありません。むしろ、Oracleは他のデータベースと同様に、PL/SQLと密接に統合された手続き型言語を持っています。ドキュメント・リンクは、Oracle SQLではなく、PL/SQLのFORループとリンクしています。 – mathguy

+0

何を検索しましたか?私は「SASスクリプトでOracle SQLを包み込む」ためにGoogle検索しましたが、私が知る限り、SASを理解している人のためのソリューションがあります。 – mathguy

答えて

2

PL/SQL無名ブロックは、このような状況で最善である:

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

あなたは純粋なSQLにINSERT文を変換しようとすることはできます?。これは、大量のデータをロードするための最も速く、最もクリーンなアプローチです。

これを設定すると、結果セットをデカルトで生成してrow_source生成を行うことができます。

Egが:あなたのテーブルがあり、最初に言って、次の

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 
関連する問題