2012-04-20 77 views
1

我有一張地圖,其中用戶輸入兩個要在數據庫表中更新的值。我寫了兩個程序,但我無法知道如何將在地圖中輸入的兩個字段值傳遞給另一個程序。我開始知道我可以使用聯動部分。但不知道它的語法或任何細節。任何人都可以幫助我的語法。謝謝如何將參數從CICS-COBOL傳遞到COBOL-DB2程序

回答

4

程序中應該有一些WORKING-STORAGE從CICS地圖檢索值。例如:

01 SCREEN-DATA. 
    05 SOME-FIELD   PIC X(10). 
    05 SOME-OTHER-FIELD PIC 9(4). 

77 PROGRAM-NAME   PIC X(8) VALUE 'PROG2'. 

假設這個計劃被稱爲PROG1並希望通過這些值的第二COBOL程序調用PROG2。 通常,這是在COBOL中使用 動態子程序調用完成的。完成動態調用的典型方法是將名爲程序的名稱放入WORKING-STORAGE變量中。我爲此宣佈PROGRAM-NAME。數據可以是 傳遞給調用的程序作爲單個項目:

CALL PROGRAM-NAME USING SOME-FIELD, SOME-OTHER-FIELD 

以上是PROG2其通過引用傳遞SOME-FILEDSOME-OTHER-FIELD動態呼叫。

PROG2通過聯合部接收這些數據如下:

LINKAGE SECTION. 
    01 LINKAGE-DATA. 
    05 FIELD1   PIC X(10). 
    05 FILED2   PIC 9(4). 

PROG2過程司將是這個樣子:

PROCEDURE DIVISION USING FIELD1, FIELD2. 

或者,您可以通過全程記錄作爲來自PROG1的單參數:

CALL PROGRAM-NAME USING SCREEN-DATA 

PROG2

PROCEDURE DIVISION USING LINKAGE-DATA. 

最後,當PROG2已完成其工作,應以GOBACKEXIT PROGRAM終止。不要使用STOP RUN作爲 這也將退出主程序(PROG1)。

COBOL調用約定與大多數其他過程語言相似。參數可以通過引用(默認值),按值或按內容傳遞 。大多數COBOL供應商支持通過 機制的所有這些參數,但實現中可能有較小的差異。以上示例適用於IBM Enterprise COBOL。如果您的 正在使用不同版本的COBOL,那麼檢查您的COBOL參考指南和COBOL編程指南將是一個好主意。

你可以得到IBM的企業COBOL指導線:Language Reference GuideProgramming Reference Guide

+0

太謝謝你了。它的工作,但我無法使用FIELD1,FIELD2變量在我的COBOL的DB2程序。當我試圖轉移這些變量到另一個變量,我得到異常終止ASRA在我的CICS屏幕。 u能幫助我解決這個 – Pramod 2012-04-21 07:25:47

+0

這聽起來像你的「程序師使用A,B,C ...」語句不排隊與您的通話程序名使用A,B,C ......」 正如你提到的這是DB2和CICS,你考慮的是獲得通過翻譯/編譯器插入聯動部分項目?您可能需要通過虛擬參數DFHEIBLK和DFHCOMMAREA,否則,被調用的程序將attemt使用未分配的存儲,從而在ASRA。 – 2013-10-07 14:05:09

0

可以傳遞參數,就像你兩個COBOL程序之間會。但是,您必須小心,您還必須傳遞DFHEIBLK和DFHCOMMAREA這兩個強制參數。

事實上,在你調用的程序,你可以在編譯器中列出了這兩個參數都在程序分流增加了,所以你需要他們在您的調用程序見。我建議您在源代碼中明確寫入它們的可讀性。

最後,它應該是這樣的:

調用的程序:

PROCEDURE DIVISION USING DFHEIBLK DFHCOMMAREA PARM1 PARM2 ... PARMXX. 

調用程序:

WORKING-STORAGE SECTION. 
01 PGM-NAME PIC X(8). 

PROCEDURE DIVISION. 
    CALL PGM-NAME USING DFHEIBLK DFHCOMMAREA PARM1 PARM2 ... PARMXX 
    END-CALL.