2016-08-22 4 views
-1

Ich hatte ein Problem bei der Verwendung von Sequenz in For-Schleife zum Einfügen von Zeilen in Oracle-Tabelle, nach Durchlaufen einiger Blog, wenn die richtige Verwendung gefunden.Verwenden von Sequenz in FOR LOOP zum Einfügen von Zeilen in Oracle-Tabelle

Falsche Nutzung: - nur eine Zeile eingefügt, da es nicht

erhöht
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; 

Gemäßer Gebrauch:

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; 

Gibt es eine andere bessere Möglichkeit, dies zu tun?

+0

Warum sollte eine Sequenz inkrementiert werden, wenn nicht in einer Schleife? 12c bietet Auto-Inkrement. Welche Version von Oracle ist das? – OldProgrammer

+0

Oracle-Datenbank 11g Enterprise Edition Release 11.2.0.4.0, ich möchte die SEQ innerhalb der Schleife erhöhen – Vijai

+1

Einfache Antwort: Nein. Welches Problem versuchen Sie genau zu lösen? –

Antwort

0

Sie können die Schleife mit forall vermeiden. Wenn Sie jedoch wirklich Schleife müssen, sieht Ihr Beispiel gut aus.

Verwandte Themen