Avere 2 Inizializza paragrafi in 1 programma COBOL

4

Sto progettando un programma COBOL che fa 2 cose.
1 legge righe specifiche da una tabella e inserisce una nuova riga in base all'originale.
2 legge righe diverse dalla stessa tabella e aggiorna quelle righe.

È un cattivo standard avere 2 procedure di inizializzazione? Devo dichiarare 2 cursori SQL, uno per ogni attività. Quindi stavo pensando:
1 initialize cursor, 2 process, 3 initialize cursor, 4 process.

Ma sembra una cattiva logica. qualcosa mi sta dicendo che dovrebbe essere più simile a:
1 initialize cursor, 2 process Ma ho problemi a pensarlo perché per me sono due compiti separati.

Ho provato a pensare a un modo in cui la mia query SQL potesse fare il lavoro, e quindi ho potuto fare solo una convalida. Ma non sono sicuro che la query sarebbe più efficace di una seconda lettura della tabella.

Ecco le mie idee sulla struttura
Ho aggiunto un terzo grafico che credo segua la risposta data a me su questa domanda. Il terzo grafico mi sembra il più logico?

    
posta Frantumn 17.07.2012 - 20:45
fonte

2 risposte

4

Devi separare le 2 attività. Dovresti avere 2 cursori e inizializzarli separatamente poiché 1 è usato per la lettura e l'altro è per lettura / scrittura.

Saresti tipo:

Move 0 to rc.

Perform Task1

If rc > 0

      logic to display message and end run.

end

perform Task2

If rc > 0

      logic to display message and end run.

end

perform end of job messages and close open files if any.

Stop Run.

.....................

Task1 is:

Open cursor 1 ...

...

Close cursor 1.

.....................

Task2 is:

Open cursor 2 ...

...

Close cursor 2.

    
risposta data 17.07.2012 - 22:49
fonte
4

Di contorno potrebbe essere:

    A01-MAIN
        PEFFORM B01-PROCESS-CURSOR1
        IF OK
           PERFORM C01-PROCESS-CURSOR2
        END-IF

    B01-PROCESS-CURSOR1.
        PERFORM B02-INITIAL.
        PERFORM UNTIL SQLCODE NOT = 0
           PERFORM B03-NEXT-ROW
           PERFORM B04-INSERT-NEW
        END-PERFORM.
        PERFORM B09-CLOSE.

    .
    .
    .
    C01-PROCESS-CURSOR2.
        PERFORM C02-INITIAL.
        PERFORM UNTIL SQLCODE NOT = 0
           PERFORM C03-NEXT-ROW
           PERFORM C04-UPDATE
        END-PERFORM.
        PERFORM C09-CLOSE.

    .
    
risposta data 18.07.2012 - 10:17
fonte

Leggi altre domande sui tag