
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