2016-08-22 9 views
-1

Forループでシーケンスを使用してOracleテーブルに行を挿入する際に問題がありました。FOR LOOPでシーケンスを使用してOracleテーブルに行を挿入する

間違った用法: - それは

DECLARE ASSET_CLAIM_STAGE_ID NUMBER := tblAssetClaimStage_ID_SEQ.NextVal; 

    BEGIN 

     FOR SI IN 1..STAGEID LOOP 
     INSERT INTO tblAssetClaimStage (assetClaimStageID, assetID, claimstageID, createDateTime) 
       SELECT ASSET_CLAIM_STAGE_ID, IN_ASSETID, SI, IN_SOLDDATE FROM DUAL WHERE NOT EXISTS (SELECT ASSETID 
       FROM tblAssetClaimStage 
       WHERE assetID = IN_ASSETID AND 
       claimstageID = SI);   
     END LOOP; 

正しい使用法インクリメントされていないので、1行しか挿入:

FOR SI IN 1..STAGEID LOOP 
     INSERT INTO tblAssetClaimStage (assetClaimStageID, assetID, claimstageID, createDateTime) 
       SELECT tblAssetClaimStage_ID_SEQ.NextVal, IN_ASSETID, SI, IN_SOLDDATE FROM DUAL WHERE NOT EXISTS (SELECT ASSETID 
       FROM tblAssetClaimStage 
       WHERE assetID = IN_ASSETID AND 
       claimstageID = SI);   
END LOOP; 
     COMMIT; 

はこれを行うには、他のより良い方法はありますか?

+0

ループ内でないとシーケンスをインクリメントする必要があると思われるのはなぜですか? 12cは自動インクリメントを提供します。これはオラクルのどのバージョンですか? – OldProgrammer

+0

Oracle Database 11g Enterprise Editionリリース11.2.0.4.0、ループ内のSEQをインクリメントしたい – Vijai

+1

単純な答え:いいえ。どのような問題、まさにあなたは解決しようとしていますか? –

答えて

0

forallを使用してループを回避できます。しかし、実際にループする必要がある場合、あなたの例は正常に見えます。

関連する問題