- O programa PROGRA01 realiza o insert da primeira parte da imagem.
- As demais partes serao realizadas por este programa, fazendo um UPDATE (append).
- A variável WS-DE-IMAGEM-REAL é usada para fazer o UPDATE da coluna de_imagem da tabela CAD.TABELA32_imagem e a mesma quando da
compilacao do programa gera as variáveis:
WS-DE-IMAGEM-REAL-LENGTH e
WS-DE-IMAGEM-REAL-DATA
Código
1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
*-----------------------------------------------------------------
IDENTIFICATION DIVISION.
*-----------------------------------------------------------------
PROGRAM-ID. PROGRA02.
AUTHOR . DORNELLES CARLOS ALBERTO.
*-----------------------------------------------------------------
* SISTEMA : SICAD
* PROGRAMA : PROGRA02
* OBJETIVO : MANTEM IMAGENS
* : MANTER IMAGEM - ALTERACAO
* ANALISTA : CARLOS ALBERTO DORNELLES
* DATA : 11/DEZEMBRO/2012
*-----------------------------------------------------------------
*-----------------------------------------------------------------
*
* O PROGRAMA PROGRA01 REALIZA O INSERT DA PRIMEIRA PARTE DA
* IMAGEM.
* AS DEMAIS PARTES SERAO REALIZADAS POR ESTE PROGRAMA, FAZENDO UM
* UPDATE (APPEND).
* A VARIAVEL WS-DE-IMAGEM-REAL EH USADA PARA FAZER O UPDATE DA CO-
* LUNA DE_IMAGEM DA TABELA CAD.TABELA32_IMAGEM E A MESMA QUANDO DA
* COMPILACAO DO PROGRAMA GERA AS VARIAVEIS:
* WS-DE-IMAGEM-REAL-LENGTH
* WS-DE-IMAGEM-REAL-DATA
*
*-----------------------------------------------------------------
*-----------------------------------------------------------------
ENVIRONMENT DIVISION.
*-----------------------------------------------------------------
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*-----------------------------------------------------------------
DATA DIVISION.
*-----------------------------------------------------------------
*-----------------------------------------------------------------
WORKING-STORAGE SECTION.
*-----------------------------------------------------------------
01 WS-AUXILIARES.
05 WS-DE-IMAGEM-REAL USAGE IS SQL TYPE IS BLOB (50M).
05 WS-DE-IMAGEM PIC X(50000000) VALUE SPACES.
05 WS-SQLCODE PIC -Z.ZZ9 VALUE ZEROES.
05 WS-PARAGRAFO PIC X(080) VALUE SPACES.
05 WS-TAMANHO-I PIC S9(009) COMP VALUE ZEROES.
05 WS-TAMANHO-U PIC S9(009) COMP VALUE ZEROES.
05 WS-TAMANHO-T PIC S9(009) COMP VALUE ZEROES.
05 WS-DE-IMAGEM-ENTRADA.
10 WS-NU-IMAGEM PIC 9(00009) VALUE ZEROES.
10 WS-NU-SEQUENCIAL-MODELO PIC 9(00009) VALUE ZEROES.
10 WS-DE-IMAGEM-JAVA PIC X(19980) VALUE SPACES.
*-----------------------------------------------------------------
LOCAL-STORAGE SECTION.
*-----------------------------------------------------------------
* DEFINICAO DE TABELAS E AREAS NA DCLGEN
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE TABELA02 END-EXEC.
EXEC SQL INCLUDE TABELA32 END-EXEC.
EXEC SQL INCLUDE TABELA59 END-EXEC.
*-----------------------------------------------------------------
LINKAGE SECTION.
*-----------------------------------------------------------------
01 DFHCOMMAREA.
COPY COPY0001.
*-----------------------------------------------------------------
* CONTEUDO DO BOOK - CADB0000
*-----------------------------------------------------------------
* 02 STREAM.
* 03 STREAM-IO-EXCECAO.
* 05 STREAM-IO-ERRO-CICS PIC 9(003).
* 05 STREAM-IO-NU-MENSAGEM PIC 9(004).
* 05 STREAM-IO-NO-MENSAGEM PIC X(078).
* 05 STREAM-IO-NU-SQLCODE PIC -9(3).
* 03 STREAM-IO-IDENTIFICACAO.
* 04 STREAM-IO-NOME-PGM PIC X(008).
* 04 STREAM-IO-CO-USUARIO PIC X(008).
* 04 STREAM-IO-CO-FUNCAO PIC X(002).
* 03 STREAM-IO-ENTRADA-SAIDA.
* 04 STREAM-IO-CONTEUDO-TAM PIC 9(005).
* 04 STREAM-IO-CONTEUDO.
* 05 FILLER PIC X(001) OCCURS 1 TO 20000
* DECADDING ON STREAM-IO-CONTEUDO-TAM.
*-----------------------------------------------------------------
*-----------------------------------------------------------------
PROCEDURE DIVISION USING DFHCOMMAREA.
*-----------------------------------------------------------------
PERFORM P0001-PROCEDIMENTOS-INICIAIS
PERFORM P1000-PROCEDIMENTOS-PRINCIPAIS
PERFORM P9000-PROCEDIMENTOS-FINAIS
.
*-----------------------------------------------------------------
P0001-PROCEDIMENTOS-INICIAIS.
*-----------------------------------------------------------------
MOVE 'P0001-PROCEDIMENTOS-INICIAIS' TO WS-PARAGRAFO
MOVE LENGTH OF STREAM-IO-CONTEUDO TO STREAM-IO-CONTEUDO-TAM
MOVE STREAM-IO-CONTEUDO (1:STREAM-IO-CONTEUDO-TAM)
TO WS-DE-IMAGEM-ENTRADA
MOVE ZEROES TO STREAM-IO-ERRO-CICS
STREAM-IO-NU-MENSAGEM
.
P0001-FIM.
EXIT.
*-----------------------------------------------------------------
P1000-PROCEDIMENTOS-PRINCIPAIS.
*-----------------------------------------------------------------
MOVE 'P1000-PROCEDIMENTOS-PRINCIPAIS' TO WS-PARAGRAFO
PERFORM P4000-SELECT-TABELA32
PERFORM P5000-UPDATE-TABELA32
PERFORM P8000-TRATA-SQLCODE
.
P1000-FIM.
EXIT.
*-----------------------------------------------------------------
P4000-SELECT-TABELA32.
*-----------------------------------------------------------------
MOVE 'P4000-SELECT-TABELA32' TO WS-PARAGRAFO
MOVE WS-NU-SEQUENCIAL-MODELO TO NU-SEQUENCIAL-MODELO
MOVE WS-NU-IMAGEM TO NU-IMAGEM OF TABELA32
EXEC SQL
SELECT BLOB(DE_IMAGEM)
INTO :WS-DE-IMAGEM-REAL
FROM CAD.TABELA32_IMAGEM TBA32
, CAD.TABELA59_IMAGEM_CRCTA_OBJETO TBA59
WHERE NU_SEQUENCIAL_MODELO = :NU-SEQUENCIAL-MODELO
AND TBA32.NU_IMAGEM = :TABELA32.NU-IMAGEM
AND TBA32.NU_IMAGEM = TBA59.NU_IMAGEM
END-EXEC
MOVE WS-DE-IMAGEM-REAL-DATA TO WS-DE-IMAGEM
MOVE WS-DE-IMAGEM-REAL-LENGTH TO WS-TAMANHO-I
.
P4000-FIM.
EXIT.
*-----------------------------------------------------------------
P5000-UPDATE-TABELA32.
*-----------------------------------------------------------------
MOVE 'P5000-UPDATE-TABELA32' TO WS-PARAGRAFO
EXEC SQL
SELECT LENGTH(STRIP(:WS-DE-IMAGEM-JAVA))
INTO :WS-TAMANHO-U
FROM SYSIBM.SYSDUMMY1
END-EXEC
COMPUTE WS-TAMANHO-I = WS-TAMANHO-I + 1
MOVE WS-DE-IMAGEM-JAVA (1:WS-TAMANHO-U) TO
WS-DE-IMAGEM (WS-TAMANHO-I:WS-TAMANHO-U)
MOVE WS-DE-IMAGEM TO WS-DE-IMAGEM-REAL-DATA
COMPUTE WS-TAMANHO-T = ((WS-TAMANHO-I + WS-TAMANHO-U) - 1)
MOVE WS-TAMANHO-T TO WS-DE-IMAGEM-REAL-LENGTH
EXEC SQL
UPDATE CAD.TABELA32_IMAGEM
SET DE_IMAGEM = :WS-DE-IMAGEM-REAL
WHERE NU_IMAGEM = :TABELA32.NU-IMAGEM
END-EXEC
.
P5000-FIM.
EXIT.
*-----------------------------------------------------------------
P8000-TRATA-SQLCODE.
*-----------------------------------------------------------------
MOVE ZEROES TO STREAM-IO-ERRO-CICS
MOVE SQLCODE TO STREAM-IO-NU-MENSAGEM
STREAM-IO-NU-SQLCODE
EVALUATE SQLCODE
WHEN +000
MOVE 'MA00107' TO CO-MENSAGEM OF TABELA02
PERFORM P8999-OBTER-MENSAGEM THRU P8999-FIM
EXEC SQL COMMIT END-EXEC
WHEN +100
MOVE 'MN00005' TO CO-MENSAGEM OF TABELA02
PERFORM P8999-OBTER-MENSAGEM THRU P8999-FIM
EXEC CICS SYNCPOINT ROLLBACK END-EXEC
WHEN +999
EXEC CICS RETURN END-EXEC
WHEN OTHER
MOVE 'Erro de acesso ao banco de dados.' TO
STREAM-IO-NO-MENSAGEM
EXEC CICS SYNCPOINT ROLLBACK END-EXEC
END-EVALUATE
.
P8000-FIM.
EXIT.
*----------------------------------------------------------------*
P8999-OBTER-MENSAGEM.
*----------------------------------------------------------------*
EXEC SQL
SELECT DE_MENSAGEM
INTO :TABELA02.DE-MENSAGEM
FROM CAD.TABELA02_MENSAGEM_APOIO
WHERE CO_MENSAGEM = :TABELA02.CO-MENSAGEM
AND DT_FIM_VIGENCIA = '31.12.9999'
WITH UR
END-EXEC
MOVE ZEROES TO STREAM-IO-NU-MENSAGEM
IF SQLCODE EQUAL +000
STRING CO-MENSAGEM ' - '
DE-MENSAGEM-TEXT (1:DE-MENSAGEM-LEN)
DELIMITED BY SIZE INTO STREAM-IO-NO-MENSAGEM
END-STRING
ELSE
STRING CO-MENSAGEM ' - '
'Mensagem nao cadastrada'
DELIMITED BY SIZE INTO STREAM-IO-NO-MENSAGEM
END-STRING
END-IF
.
P8999-FIM.
EXIT.
*-----------------------------------------------------------------
P9000-PROCEDIMENTOS-FINAIS.
*-----------------------------------------------------------------
EXEC CICS RETURN END-EXEC
.
P9000-FIM.
EXIT.
|