• Using Publis/Subscribe function in COBOL


    Publis/Subscribe function in COBOL

    >> Embeded Delete

    1. Use table SOS.ECUI.ORDERS.

    1. INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(1,1111);
    2. INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(2,2222);
    3. INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(3,3333);
    2. In COBOL program
    This program will declare a cursor, and then disply it. if all the records processed, it will wait for the new added record, until 1minute.
    1.        TEST-PB.
    2.  
    3.            PERFORM BEGIN-TRAN        THRU BEGIN-TRAN-EXIT.
    4.  
    5.            MOVE 0 TO WS-AMOUNT.
    6.            MOVE SPACES TO WS-ORDER-NBR.
    7.  
    8.            EXEC SQL
    9.            DECLARE GET_ORDERS CURSOR WITH HOLD FOR
    10.            SELECT ORDER_NBR, AMOUNT FROM
    11.            (DELETE FROM STREAM(SOS.ECUI.ORDERS)
    12.            FOR SKIP CONFLICT ACCESS) AS ORDERS
    13.            END-EXEC.
    14.  
    15.            EXEC SQL
    16.            OPEN GET_ORDERS
    17.            END-EXEC.
    18.  
    19.            ACCEPT WS-START FROM TIME.
    20.            MOVE 0 TO WS-TIME.
    21.            PERFORM PROCESS-ORDERS THRU PROCESS-ORDERS-EXIT
    22.                                  UNTIL WS-TIME >10000.
    23.  
    24.            EXEC SQL
    25.            CLOSE GET_ORDERS
    26.            END-EXEC.
    27.  
    28.            PERFORM END-TRAN          THRU END-TRAN-EXIT.
    29.  
    30.        TEST-PB-EXIT.
    31.            EXIT.
    32.  
    33.       /
    34.        PROCESS-ORDERS.
    35.  
    36.            ACCEPT WS-END FROM TIME.
    37.  
    38.            COMPUTE WS-TIME = WS-END - WS-START.
    39.            IF WS-TIME >1000
    40.               GO TO PROCESS-ORDERS-EXIT.
    41.  
    42.            EXEC SQL
    43.            FETCH GET_ORDERS INTO :WS-ORDER-NBR,:WS-AMOUNT
    44.            END-EXEC.
    45.  
    46.            DISPLAY WS-ORDER-NBR, WS-AMOUNT.
    47.  
    48.        PROCESS-ORDERS-EXIT.
    49.            EXIT.

    3. Compile it and exec it

    1. $DATA01.ECSRC 138> RUN ECTEXE
    2. 00000000010000001111HAS BEEN PROCESSED
    3. 00000000020000002222HAS BEEN PROCESSED
    4. 00000000030000003333HAS BEEN PROCESSED
    4. Insert more records into table
    1. >>INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(4,4444);
    2.  
    3. ---1 row(s) inserted.
    4. >>INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(5,5555);
    5.  
    6. ---1 row(s) inserted.
    7. >>INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(6,6666);
    8.  
    9. ---1 row(s) inserted.

    5. In the program session, the new added records can be processed.

    1. $DATA01.ECSRC 138> RUN ECTEXE
    2. 00000000010000001111HAS BEEN PROCESSED
    3. 00000000020000002222HAS BEEN PROCESSED
    4. 00000000030000003333HAS BEEN PROCESSED
    5. 00000000040000004444HAS BEEN PROCESSED
    6. 00000000050000005555HAS BEEN PROCESSED
    7. 00000000060000006666HAS BEEN PROCESSED
    6. check the table
    1. >>SELECT * FROM SOS.ECUI.ORDERS;
    2.  
    3. ---0 row(s) selected.
     

    >> Embeded Update

    1. Table ORDERS, STATUS is "N"

    1. >>SELECT * FROM SOS.ECUI.ORDERS;
    2.  
    3. ORDER_NBR    AMOUNT       STATUS
    4. -----------  -----------  ------
    5.  
    6.           1         1111  N
    7.           2         2222  N
    8.           3         3333  N
    9.  
    10. ---3 row(s) selected.
    2. In COBOL Program
    1.        TEST-PB-UPDATE.
    2.  
    3.            PERFORM BEGIN-TRAN        THRU BEGIN-TRAN-EXIT.
    4.  
    5.            MOVE 0 TO WS-AMOUNT, WS-ORDER-NBR.
    6.  
    7.            EXEC SQL
    8.            DECLARE GET_ORDERS_UPD CURSOR WITH HOLD FOR
    9.            SELECT ORDER_NBR, AMOUNT FROM
    10.            (UPDATE STREAM(SOS.ECUI.ORDERS) SET STATUS ='Y'
    11.            WHERE STATUS ='N') AS ORDERS
    12.            END-EXEC.
    13.  
    14.            EXEC SQL
    15.            OPEN GET_ORDERS_UPD
    16.            END-EXEC.
    17.  
    18.            ACCEPT WS-START FROM TIME.
    19.            MOVE 0 TO WS-TIME.
    20.            PERFORM PROCESS-ORDERS-UPD THRU PROCESS-ORDERS-UPD-EXIT
    21.                                  UNTIL WS-TIME >10000.
    22.  
    23.            EXEC SQL
    24.            CLOSE GET_ORDERS_UPD
    25.            END-EXEC.
    26.  
    27.            PERFORM END-TRAN          THRU END-TRAN-EXIT.
    28.  
    29.        TEST-PB-UPDATE-EXIT.
    30.            EXIT.
    31.  
    32.       /
    33.        PROCESS-ORDERS-UPD.
    34.  
    35.            ACCEPT WS-END FROM TIME.
    36.            COMPUTE WS-TIME = WS-END - WS-START.
    37.  
    38.            EXEC SQL
    39.            FETCH GET_ORDERS_UPD INTO
    40.                 :WS-ORDER-NBR,
    41.                 :WS-AMOUNT
    42.            END-EXEC.
    43.  
    44.            DISPLAY WS-ORDER-NBR, WS-AMOUNT,"  HAS BEEN PROCESSED".
    45.  
    46.        PROCESS-ORDERS-UPD-EXIT.
    47.            EXIT.
    Notice that:
    *** ERROR[4001] Column "N" is not found.  Tables in scope: SOS.ECUI.ORDERS.  Def
    ault schema: SOS.ECUI.
     
    *** WARNING[4104] If a character literal was intended, you must use the single q
    uote delimiter: 'N'. The use of double quotes causes SQL/MX to interpret "N" as
    a delimited identifier column name.
     

    3. Run program

    1. $DATA01.ECSRC 44> RUN ECTEXE
    2. 00000000010000001111  HAS BEEN PROCESSED
    3. 00000000020000002222  HAS BEEN PROCESSED
    4. 00000000030000003333  HAS BEEN PROCESSED
    4. Insert more records into the table
    1. >>INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(4,4444);
    2.  
    3. ---1 row(s) inserted.
    4. >>INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(5,5555);
    5.  
    6. ---1 row(s) inserted.
    7. >>INSERT INTO ORDERS(ORDER_NBR,AMOUNT) VALUES(6,6666);
    8.  
    9. ---1 row(s) inserted.
    5. In program session, we can see the new added records
    1. $DATA01.ECSRC 44> RUN ECTEXE
    2. 00000000010000001111  HAS BEEN PROCESSED
    3. 00000000020000002222  HAS BEEN PROCESSED
    4. 00000000030000003333  HAS BEEN PROCESSED
    5. 00000000040000004444  HAS BEEN PROCESSED
    6. 00000000050000005555  HAS BEEN PROCESSED
    7. 00000000060000006666  HAS BEEN PROCESSED
    6. Check the STATUS, it has been updated to "Y"
    1. >> SELECT * FROM SOS.ECUI.ORDERS;
    2.  
    3. ORDER_NBR    AMOUNT       STATUS
    4. -----------  -----------  ------
    5.  
    6.           1         1111  Y
    7.           2         2222  Y
    8.           3         3333  Y
    9.           4         4444  Y
    10.           5         5555  Y
    11.           6         6666  Y
     
     





  • 相关阅读:
    babel6的babel-plugin-add-module-exports插件
    babel ---- presets字段设定转码规则
    Babel6.x的安装过程
    npm
    JavaScript的数组
    JavaScript的数据类型
    JavaScript
    数据类型详解
    jsp笔记总结
    Servlet学习总结
  • 原文地址:https://www.cnblogs.com/ECNB/p/4611267.html
Copyright © 2020-2023  润新知