zoukankan      html  css  js  c++  java
  • 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
     
     





  • 相关阅读:
    时间函数的查询-thinkphp
    关于回退的解决
    get post的区别
    日期函数及其查询
    asp MVC的一些tip总结
    asp.net mvc中cookie的完整理解
    解决.net移除dll文件以后依旧报错
    ASP.net MVC redis完整示例(含集合,哈希,sortedset)
    JavaScript实现图的深度广度优先遍历
    JavaScript实现二叉查找树
  • 原文地址:https://www.cnblogs.com/ECNB/p/4611267.html
Copyright © 2011-2022 走看看