A partir de agora, nós aprendemos a utilização de arquivos em COBOL. Agora, vamos discutir como um programa em COBOL interage com DB2. Ela envolve os seguintes termos:
Embedded instruções SQL são usados em COBOL programas para executar operações SQL padrão. Embedded instruções SQL são pré-processadas pelo SQL processador antes que o programa de aplicação é compilada. COBOL é conhecido como língua do país de acolhimento. EM COBOL e DB2, os aplicativos são os aplicativos que incluem tanto EM COBOL e DB2.
Embedded SQL declarações funcionam como comandos SQL normal com algumas pequenas alterações. Por exemplo, se a saída de uma consulta é direcionado a um conjunto pré-definido de variáveis que são referidos como variáveis. Mais uma cláusula dentro é colocado na instrução SELECT.
São regras que devem ser seguidas durante a codificação de linguagem COBOL e DB2, programa:
Todas as declarações SQL deve ser delimitada entre EXEC SQL e TERMO-EXEC.
Declarações SQL deve ser codificado na área B.
Todas as tabelas que são usadas em um programa devem ser declaradas na Working-Storage Seção. Isso é feito usando-se a instrução INCLUDE.
Todos os comandos SQL que não INCLUEM e DECLARAR TABELA devem constar no processo Divisão.
Hospedar as variáveis são utilizadas para receber dados de uma tabela ou inserindo dados em uma tabela. Host variáveis devem ser declaradas para todos os valores que estão a ser transmitidas entre o programa e a DB2. Elas são declaradas na Working-Storage Seção.
As variáveis podem ser Host itens do grupo, mas podem ser agrupados em estrutura de acolhimento. Eles não podem ser renomeados ou redefinido. Usando variáveis host com instruções SQL, prefixo-los com dois pontos (:).
Seguir é a sintaxe para declarar variáveis host e incluem tabelas na Working-Storage seção:
DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE table-name END-EXEC. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 STUDENT-REC. 05 STUDENT-ID PIC 9(4). 05 STUDENT-NAME PIC X(25). 05 STUDENT-ADDRESS X(50). EXEC SQL END DECLARE SECTION END-EXEC.
SQLCA é um SQL área de comunicação através da qual DB2 passa o feedback do SQL a execução do programa. Diz o programa se a execução foi bem sucedido ou não. Há um número de variáveis predefinidas no SQLCA como SQLCODE que contém o código de erro. O valor '000' no SQLCODE membros uma execução bem sucedida.
Seguir é a sintaxe para declarar um SQLCA na Working-Storage seção:
DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC.
Vamos assumir que temos uma tabela nomeada como "Estudante", que contém Student-Id , Student-Name , e Student-Address .
O aluno tabela contém os seguintes dados:
Student Id Student Name Student Address 1001 Mohtashim M. Hyderabad 1002 Nishant Malik Delhi 1003 Amitabh Bachan Mumbai 1004 Chulbul Pandey Lucknow
O exemplo a seguir mostra o uso da consulta em um programa em COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC. EXEC SQL INCLUDE STUDENT END-EXEC. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 WS-STUDENT-REC. 05 WS-STUDENT-ID PIC 9(4). 05 WS-STUDENT-NAME PIC X(25). 05 WS-STUDENT-ADDRESS X(50). EXEC SQL END DECLARE SECTION END-EXEC. PROCEDURE DIVISION. EXEC SQL SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS FROM STUDENT WHERE STUDENT-ID=1004 END-EXEC. IF SQLCODE=0 DISPLAY WS-STUDENT-RECORD ELSE DISPLAY 'Error' END-IF. STOP RUN.
JCL para executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP001 EXEC PGM=IKJEFT01 //STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(SSID) RUN PROGRAM(HELLO) PLAN(PLANNAME) - END /*
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
1004 Chulbul Pandey Lucknow
O exemplo a seguir mostra o uso do elemento query em um programa em COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC. EXEC SQL INCLUDE STUDENT END-EXEC. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 WS-STUDENT-REC. 05 WS-STUDENT-ID PIC 9(4). 05 WS-STUDENT-NAME PIC X(25). 05 WS-STUDENT-ADDRESS X(50). EXEC SQL END DECLARE SECTION END-EXEC. PROCEDURE DIVISION. MOVE 1005 TO WS-STUDENT-ID. MOVE 'Howcodex' TO WS-STUDENT-NAME. MOVE 'Hyderabad' TO WS-STUDENT-ADDRESS. EXEC SQL INSERT INTO STUDENT(STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS) VALUES (:WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS) END-EXEC. IF SQLCODE=0 DISPLAY 'Record Inserted Successfully' DISPLAY WS-STUDENT-REC ELSE DISPLAY 'Error' END-IF. STOP RUN.
JCL para executar o programa em COBOL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP001 EXEC PGM=IKJEFT01 //STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(SSID) RUN PROGRAM(HELLO) PLAN(PLANNAME) - END /*
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Record Inserted Successfully 1005 Howcodex Hyderabad
O exemplo a seguir mostra o uso da atualização consulta em um programa em COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC. EXEC SQL INCLUDE STUDENT END-EXEC. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 WS-STUDENT-REC. 05 WS-STUDENT-ID PIC 9(4). 05 WS-STUDENT-NAME PIC X(25). 05 WS-STUDENT-ADDRESS X(50). EXEC SQL END DECLARE SECTION END-EXEC. PROCEDURE DIVISION. MOVE 'Bangalore' TO WS-STUDENT-ADDRESS. EXEC SQL UPDATE STUDENT SET STUDENT-ADDRESS=:WS-STUDENT-ADDRESS WHERE STUDENT-ID=1003 END-EXEC. IF SQLCODE=0 DISPLAY 'Record Updated Successfully' ELSE DISPLAY 'Error' END-IF. STOP RUN.
JCL para executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP001 EXEC PGM=IKJEFT01 //STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(SSID) RUN PROGRAM(HELLO) PLAN(PLANNAME) - END /*
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Record Updated Successfully
O exemplo a seguir mostra o uso de excluir a consulta em um programa em COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC. EXEC SQL INCLUDE STUDENT END-EXEC. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 WS-STUDENT-REC. 05 WS-STUDENT-ID PIC 9(4). 05 WS-STUDENT-NAME PIC X(25). 05 WS-STUDENT-ADDRESS X(50). EXEC SQL END DECLARE SECTION END-EXEC. PROCEDURE DIVISION. MOVE 1005 TO WS-STUDENT-ID. EXEC SQL DELETE FROM STUDENT WHERE STUDENT-ID=:WS-STUDENT-ID END-EXEC. IF SQLCODE=0 DISPLAY 'Record Deleted Successfully' ELSE DISPLAY 'Error' END-IF. STOP RUN.
JCL para executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP001 EXEC PGM=IKJEFT01 //STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(SSID) RUN PROGRAM(HELLO) PLAN(PLANNAME) - END /*
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Record Deleted Successfully
Os cursores são usados para lidar com seleções múltiplas linhas de uma vez. Eles são estruturas de dados que armazenam todos os resultados de uma consulta. Eles podem ser definidos na Working-Storage secção ou o processo Divisão. Seguem-se as operações associadas com o Cursor.
Cursor declaração pode ser feita na Working-Storage secção ou o processo Divisão. A primeira afirmação é a DECLARAR, que é um não-executável.
EXEC SQL DECLARE STUDCUR CURSOR FOR SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT WHERE STUDENT-ID >:WS-STUDENT-ID END-EXEC.
Antes de utilizar um cursor, declaração aberta deve ser realizada. A declaração aberta prepara o SELECIONE para execução.
EXEC SQL OPEN STUDCUR END-EXEC.
Close declaração libera toda a memória ocupada pelo cursor. É obrigatório para fechar o cursor antes de terminar um programa.
EXEC SQL CLOSE STUDCUR END-EXEC.
Buscar declaração identifica o cursor e coloca o valor da cláusula Into. Um comando de busca está codificada em loop, como temos uma linha de cada vez.
EXEC SQL FETCH STUDCUR INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS END-EXEC.
O exemplo a seguir mostra o uso de cursor para buscar todos os registros da tabela ALUNO:
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC. EXEC SQL INCLUDE STUDENT END-EXEC. EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 WS-STUDENT-REC. 05 WS-STUDENT-ID PIC 9(4). 05 WS-STUDENT-NAME PIC X(25). 05 WS-STUDENT-ADDRESS X(50). EXEC SQL END DECLARE SECTION END-EXEC. EXEC SQL DECLARE STUDCUR CURSOR FOR SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT WHERE STUDENT-ID >:WS-STUDENT-ID END-EXEC. PROCEDURE DIVISION. MOVE 1001 TO WS-STUDENT-ID. PERFORM UNTIL SQLCODE = 100 EXEC SQL FETCH STUDCUR INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS END-EXEC DISPLAY WS-STUDENT-REC END-PERFORM STOP RUN.
JCL para executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP001 EXEC PGM=IKJEFT01 //STEPLIB DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(SSID) RUN PROGRAM(HELLO) PLAN(PLANNAME) - END /*
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
1001 Mohtashim M. Hyderabad 1002 Nishant Malik Delhi 1003 Amitabh Bachan Mumbai 1004 Chulbul Pandey Lucknow