db2 mainframes

Upload: gabriel-pessine

Post on 08-Jul-2018

240 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/19/2019 Db2 Mainframes

    1/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    Índice Página

    Alterandoatributosdeumatabell 9Alterandooconteúdodeumacolunaemumatabela 9Atributosdascolunas 7ConceitodeLUW-LogicalUnitofWork 3ConceitodeVariáveisHOST 16

    Contandolinhasdeumatabela12Contandolinhasdistintamentedeumatabela 12Criandoíndicenãoúnicoemumatabela 8Criandoíndiceúnicoemumatabela 8Criandoumatabela 7DB2IDEFAULTSPANEL1 5DB2IPRYMARYOPTIONMENU 4Desfazendoasalteraçõesnastabelas 3Efetivandoasalteraçõesnastabelas 3Excluindolinhasdeumatabela 10Excluindoumatabela 8Inserindodadosemumatabela 9Juntandoduastabelasondea1ªtabelaéamandatória 13Juntandoduastabelasondea2ªtabelaéamandatória 14Juntandoduastabelasondeaambastabelassãomandatórias 15Juntandoduastabelas 13OqueéoDB2 1Pesquisandotabelaporpartedeumacoluna – LIKE 15Pesquisandotabelaporpartedeumacoluna – SUBSTR 16Processodeexecução 2SelecionadooMenor,Maior,SomatóriaeMédiaaritmética 2Selecionandolinhasdeumatabelaentrevaloresdeterminados 11Selecionandolinhasdeumatabelaentrevaloresespecíficos 11

    Selecionandolinhasdeumatabela 10Selecionandolinhasdistintasdeumatabela 11SPUFI-SQLProcessorUsingFileInput 4SPUFIXCOBOL 17SQLCODE – PrincipaiscódigosderetornodoacessoaoDB2 21UtilizaçãodoSPUFI 4

    DB2

    DataBase2 

    Student Guide

  • 8/19/2019 Db2 Mainframes

    2/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    1 2

    O que é o DB2

    ODB2éumbancodedadosqueutilizaummódulodeacesso,eumdispositivofísico dearmazenagemdosdados.NoDB2existeoconceitodeDATA BASE,TABLE SPACE,TABELAS, LINHAS e COLUNASonde:DATABASE-Áreaqueconterá(ão)os)table(s)space(s).  TABLESPACE-Áreaqueconterá(ão)a(s)tabela(s).TABELA-Arquivodedados.

    LINHA-Registrodedados.COLUNAS-Camposondeconterãoasinformaçõesdedados.

    Processo de execução

    Quando compilamos um fonte SQL, temos quatro fases distintas:Pré-compilação,compilação,linkediçãoeBINDPré-Compilação

    VerificaasintaxedoSQLIncluiasdeclaraçõesdastabelasSQLevariáveisHOSTIncluiSQLCACriaoDBRMcomoscomandoSQLcopiadosCompilaçãoGeraoexecutávelapartirdofontetraduzidopelopré-compiladorOTIMESTAMPécopiadoparaomódulogeradoparafuturascomparaçõescomamanipulaçãodatabela.Linkedição

    GeraosmódulosdecargaapartirdosexecutáveisGeraosmódulosdeacessoaoDB2Bind

    GeraoplanoapartirdaDBRMemódulosdecargaapartirdosexecutáveis

    OTIMESTAMPécopiadoparaaDBRMOplanocontémaestratégiadeacessoaoDB2,quesão:Validação:Checagemdereferênciasdastabelasecolunas;Autorização:Acessosrequeridos,usuáriosautorizados;Estratégia de acesso: Índices utilizados, estratégia de locking, estratégia deresoluçãodoscomandosJOIN,UNION,etc.Nota

    DBRM -DATABASEREQUESTMODULE,contémtodasasinstruçõesSQLdoprograma fonte, é deste módulo queo BIND faz uso paracriar o plano deacesso.TIMESTAMP   –  Armazena um valor combinado entre DATA e HORA emcentésimosdesegundo,paraverificaçãodaestruturamontadanatabela.LOCKING – Monitora egerenciaomecanismoqueo DB2usaparachecaraintegridadedaDatabase  .

    TABLE SPACE 1

    TABELA1

    TABELA2

    TABLE SPACE 2

    TABELA3

    DBRM1

    Módulo

    Acesso2

    Módulo

    Acesso1

    Aplicativo1

    Aplicativo2

    DBRM2

    Linha

    Coluna

    Índices

    DATA BASE

  • 8/19/2019 Db2 Mainframes

    3/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    3 4

    Conceito de LUW - Logical Unit of WorkA LUW é um conceito onde todosos comandos de manutenção de dados nastabelas(INSERT,UPDATE,DELETE)espelhamaimagemdaslinhasantesdessasmanutenções,detalformaquesehouverumABEND,oDB2faráusodamesmapara desfazer (RECOVERY) essasmanutenções atéo momento doABEND,oscomandos COMMIT WORK e ROLLBACK WORK influenciam na CRIAÇÃO eRECOVERYdaLUW,sendoseuusomuitoimportanteedeveráserbemestudadoparacadaaplicação.

    Efetivando as alterações nas tabelas

    OcomandoCOMMITWORKefetiva,atéomomento desuaexecução, todasasalterações feitas nas tabelas envolvidas em uma aplicação, efetivando asmanutenções e limpandoaLUWda aplicação,apóseste comando não teremosmaiscomodesfazerasalteraçõesdastabelasenvolvidas.O término normal do apl icativo será executado um COMMIT WORKautomaticamente.Desfazendo as alterações nas tabelas

    OcomandoROLLBACKWORKnãoefetivaasmanutençõesfeitasnastabelasaté

    o momento de sua execução, os dados contidos na LUW da aplicação serãorestauradosnastabelasenvolvidas.O término anormal do aplicativo será executado um ROLLBACK WORKautomaticamente.

    SPUFI - SQL Processor Using File Input

    OSPUFIfazpartedoDB2z/OSevemjuntonoDB2 Interactive Panel.BasicamenteSPUFIéapenasumamaneirarápidadeexecutarSQLsatravésdeumarquivodeentradaesaídacomalgumaspoucasopções,porémconsideroamaneiramaisrápidaepráticaparaexecutarSQLsurgentesequevocêprecisadoresultadosomentenaqueledeterminadomomentoenãoprecisaformatarumrelatórioouguardarestesdadospormuitotempo.

    DB2I PRYMARY OPTION MENU

    Menu principal onde serámostrado as opçõesde navegação noDB2. Nestemenuasprincipaisopçõessão:1:Utilização do SPUFI,queéumutilitáriointerativodoDB22:DCLGEN, serve para gerarbook’s das bases dedadospara utilização emprogramas.D:Configurações do DB2,serveparaindicaroSSID,(Sub-SystemIdentification). 

  • 8/19/2019 Db2 Mainframes

    4/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    5 6

    NomenuDB2I DEFAULTS PANEL 1,bastainformaronomeDSN1noparâmetroDB2NAMEparaconectarmosoDB2ativonozOS.

    Para entrarmos nesteopçãoselecionamosa opção1nomenuanterior (DB2IPrimary Option Menu) e informando o arquivo particionado que conterá oscomandos SQL(Opção 1) e o arquivo particionado de saída do resultado daexecuçãodocomando(Opção4),asopções5,6,7,8,e9sãooscomandosqueserãoexecutadosacadasolicitaçãodeexecuçãodoSPUFI.

  • 8/19/2019 Db2 Mainframes

    5/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    7 8

    Criando uma tabela

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    CREATE TABLE MFS.TBALUNOS

    MATRICULA DECIMAL (07) NOT NULL,

    NOME CHAR (35) NOT NULL,

    NASCIMENTO DATE,

    IDADE INTEGER NOT NULL)

    IN MSFBASE.MFSTABLE;

    CREATE TABLE - Criaçãodatabela,estecomandorequerosparâmetros:MFS - Proprietário (OWNER) da tabela, pois somente o mesmo pode fazermanutençõesnatabela.TBALUNOS - Tabelaondeascolunasserãoinformadas.MATRICULA, NOME, NASCIMENTO e IDADE:Colunasdatabela,vejaabaixoosatributosdascolunas.NOT NULL - Coluna comconteúdoobrigatório, significa que deverá haver umconteúdonamesmaquandoforfeitaumainclusãodedados,naausênciadesteparâmetrooDB2assume“NULL”(Conteúdoopcional).

    MFSTABLE -TABLESPACEqueconteráatabela.MFSBASE - DATABASEondeconteráaTABLESPACE.

    Atributos das colunas

    DECIMAL:Defineumacolunadeconteúdonumériconatabela,comousemcasasdecimais,idealparacálculos.SMALLINT:Defineumacolunadeconteúdonuméricocujoomaiorvalorparaarmazenamentoéde32768.INTEGER:Defineumacoluna deconteúdonuméricocujoo maior valor paraarmazenamentoéde65536.CHAR: Define uma coluna cujo conteúdo será um conjunto de caracteres

    (string),nãosendoutilizadoparacálculosnuméricos.VARCHAR : Coluna para conjunto de caracteres que obterá um tamanhovariado,dependendodoconteúdoarmazenado.DATE: Coluna que conterá uma data no formato adequado ao DB2(‘AAAA-MM-DD’).

     TIME:Colunaqueconteráhoranoformatode(‘HH:MM:SS’).TIMESTAMP:Dataehoramedidaemcentésimosdesegundo.

    Excluindo uma tabela

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    DROP TABLE MFS.TBALUNOS;

    DROP TABLE - Comandodedeleçãodatabela

    Criando índice único em uma tabela

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 71...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    CREATE UNIQUE INDEX

    MFS.TBALUNOS_I1 ON MFS.TBALUNOS

    (MATRICULA ASC);

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    CREATE INDEX

    MFS.TBALUNOS_I2 ON MFS.TBALUNOS

    (NOME ASC);

    Criando índice não único em uma tabela

    CREATE UNIQUE INDEX - Comandode criaçãodeíndice,aclausulaUNIQUEindicaqueascolunasreferenciadasnocomandonãopoderãotervaloresiguaisdentrodamesmatabela.ASC - Indica que a ordenação do índice será ascendente (do menor paraomaior), tambémpodemos usar a clausulaDESC indica que a ordenação serádescendente(domaiorparaomenor).

    CREATE INDEX - Comandodecriaçãodeíndice,aclausulaomissãodaclausulaUNIQUE indica que as colunasreferenciadas nocomando poderão ter valoresiguaisdentrodamesmatabela.

    Excluindo um índice da tabela

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    DROP INDEX MFS.TBALUNOS_I1;

    DROP INDEX - Comandodedeleçãodoíndicedatabela

  • 8/19/2019 Db2 Mainframes

    6/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    9 10

    Alterando atributos de uma tabela

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    ALTER TABLE MFS.TBALUNOS

    ADD PRIMARY KEY(MATRICULA)

    ALTER COLUMN IDADE SET DATA TYPE DECIMAL(3,0);

    ALTER – Comandousadoparafazerasseguintesmanutençõesnatabela,

    ADD PRIMARY KEY -CriaíndiceprimárioparaacolunaMATRICULA.ALTER COLUMN  –  Altera o atributoda coluna IDADE passando de INTEGER(originalmentedefinido)paraDECIMAL(3).

    AcláusulaWHEREpoderáassumirosformatos:Comparações Simples

    WHERE COLUNA    ARGUMENTO

    WHERE COLUNA >   ARGUMENTO

    WHERE COLUNA    ARGUMENTO2OU

    WHERE COLUNA = ARGUMENTO1

    OR COLUNA2 

  • 8/19/2019 Db2 Mainframes

    7/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    11 12

    Selecionando linhas de uma tabela entre valores específicos

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT NOME

    FROM MFS.TBALUNOS

    WHERE NOME BETWEEN 'ANTONIO' AND 'JOAO‘ 

    ORDER BY NOME DESC;

    BETWEEN-Clausulaparaobtercoluna(s)databelacujovaloresestãoentre asconstantesouáreadedados,tambémpodemosusaraclausulaNOTBETWEEN.  

    Selecionando linhas de uma tabela entre valores determinados

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT NOME

    FROM MFS.TBALUNOS

    WHERE NOME IN ('ANTONIO‘, ‘JOAO‘) 

    ORDER BY NOME;

    IN :Usadoparaselecionarlinhascomváriosvaloresdeumadeterminadacoluna,a sintaxedo INé equivalenteao OR,podemosusar o parâmetroNOTIN queselecionará todas as linhas cujo o conteúdo seja diferente do argumento depesquisa.ORDER BY:AslinhasselecionadasserãoordenadaspelacolunaNOMEemordemascendenteodefaultdestaclausulaéascendente(ASC).ASC:Ordemascendente(domenorparaomaior)DESC:Ordemdesendente(domaiorparaomenor)

    Selecionando linhas distintas de uma tabela

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT DISTINCT NOME FROM MFS.TBALUNOS;

    DISTINCT - Selecionaapenasumalinhacujooconteúdosejarepetitivo,acolunacomconteúdorepetidosóapareçaumavez.

      1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT COUNT (*)

    FROM MFS.TBALUNOS

    WHERE NOME = 'ANA';

    Contando linhas de uma tabela

    COUNT - Conta quantas linhas existem em uma tabela que satisfaça a(s)

    condição(ões)doWHERE.

      1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT COUNT (DISTINCT NOME)

    FROM MFS.TBALUNOS;

    Contando linhas distintamente de uma tabela

    DISTINCT -SomentecontaráaslinhasqueacondiçãoWHEREnãoserepita.

      1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2SELECT MIN (IDADE),

    MAX (IDADE),

    SUM (IDADE),

    AVG (IDADE)

    FROM MFS.TBALUNOS;

    Selecionado o Menor, Maior, Somatória e Média aritmética de uma coluna

    MIN  - Menor idade

    MAX - Maior idadeSUM - Somatória das idades

    AVG - Média aritmética das idades

  • 8/19/2019 Db2 Mainframes

    8/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    13 14

    Juntando duas tabelas

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT T1.MATRICULA,T1.NOME,T2.CURSO,T2.VALOR

    FROM MFS.TBALUNOS T1,

    MFS.TBCURSOS T2

    WHERE T1.MATRICULA = T2.MATRICULA;

    Para juntarmos em uma pesquisa duas ou mais tabelas usamos o comandoSELECT/WHEREouONINNERJOIN,somenteserãoselecionadasaslinhasquetiveremcorrespondentesentreastabelaspelo(s)campo(s)dacláusulaWHERE.OsufixoT1eT2sãoosalias(apelidos)queastabelaspoderãoter,oaliaspode

    assumirqualquervaloralfanumérico.  

    LEFT OUTER JOIN - Afunçãodestaclausulaparâmetroéjuntarastabelascujaa

    matrículatenhacorrespondenteentreTBALUNOSeTBCURSOS,masdatabelaTBALUNOSvirãotodasaslinhasedatabelaTBCURSOSsomentevirãoaslinhasquetiveremcorrespondentesnatabelaTBALUNOS.As colunas com conteúdos “----------” são colunas nulas, no COBOLdevemosassinalarasvariáveisindicadorasparacadaumadelas.  

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT T1.MATRICULA,T1.NOME,T2.CURSO,T2.VALOR

    FROM MFS.TBALUNOS T1

    INNER JOIN MFS.TBCURSOS T2

    ON T1.MATRICULA = T2.MATRICULA;

    Ou

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT T1.MATRICULA,T1.NOME,T2.CURSO,T2.VALOR

    FROM MFS.TBALUNOS T1

    LEFT OUTER JOIN MFS.TBCURSOS T2

    ON T1.MATRICULA = T2.MATRICULA;

    Juntando duas tabelas onde a 1ª tabela é a mandatória

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT T1.MATRICULA,T1.NOME,T2.CURSO,T2.VALOR

    FROM MFS.TBALUNOS T1

    RIGHT OUTER JOIN MFS.TBCURSOS T2

    ON T1.MATRICULA = T2.MATRICULA;

    Juntando duas tabelas onde a 2ª tabela é a mandatória

    RIGHT OUTER JOIN - Afunçãodestaclausulaéjuntarastabelascujaamatriculatenha correspondente entre TBCURSOS e TBALUNOS, mas da tabelaTBCURSOSvirãotodasaslinhasedatabelaTBALUNOSsomentevirãoaslinhasquetiveremcorrespondentesnatabelaTBCURSOS.  

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT T1.MATRICULA,T1.NOME,T2.CURSO,T2.VALOR

    FROM MFS.TBALUNOS T1

    FULL OUTER JOIN MFS.TBCURSOS T2

    ON T1.MATRICULA = T2.MATRICULA;

    Juntando duas tabelas onde a ambas tabelas são mandatórias

    FULL OUTER JOIN - A função deste parâmetro é juntar as tabelas cuja amatrícula tenha correspondente entre as tabelas TBALUNOS eTBCURSOS , mas as matrículas da tabela TBCURSOS que não tenhamcorrespondentenatabelaTBALUNOSserãolistadas comascolunas comconteúdosnulos. 

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT DESCRICAO, VALOR

    FROM MFS.TBCURSOS

    WHERE DESCRICAO LIKE 'C%‘; 

    Pesquisando tabela por parte de uma coluna - LIKE

    LIKE - TemafinalidadedepesquisartodososnomesdatabelaTBCURSOS cujo nome inicie com  “ ”, podem também assumir asseguintesformas:NOT LIKE ‘ ’ -TodososnomesqueNÃOcomecemcomJOLIKE

    “_

     _SE

    ”-Todosnomesquena3a.e 4a.posiçãosejaSENOT LIKE “_ _SE ”-Todosnomesquena3a.e 4a.posiçãoNÃOsejaSE

  • 8/19/2019 Db2 Mainframes

    9/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    15 16

    Pesquisando tabela por parte de uma coluna - SUBSTR

    1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7 7

    1...5....1...2...6...0...4...0...2...6...0...4...0...2...6...0...4...0.2

    SELECT DESCRICAO, VALOR

    FROM MFS.TBCURSOS

    WHERE SUBSTR (DESCRICAO,1,2) = 'CI';

    SUBSTR - Indicaquecampo serápesquisadoporumapartedo textoqueserá

    informadonacláusulaWHERE.Nota

    Noexemploacimaserãoselecionadasaslinhascujaasduasprimeirasposiçõesdocampodescriçãoforiguala “CI”.

    Conceito de Variáveis HOST

    São variáveis definidas conforme a linguagem usada, e nas instruções SQL,

    essas variáveis devem ser compatíveis com os atributos das colunas definidas

    na tabela a qual elas fazem referências. 

    Campos Numéricos

    DB2 COBOL PL1VAR SMALLINT 01 VAR PIC S9(04) COMP. DCL VAR BIN FIXED(15)

    VAR INTEGER 01 VAR PIC S9(09) COMP. DCL VAR BIN FIXED(31)

    VAR FLOAT(21) 01 VAR COMP-1. DCL VAR BIN

    VAR FLOAT(53) 01 VAR COMP-2. DCL VAR BIN FLOAT(53)

    VAR DECIMAL(03) 01 VAR PIC S9(03)V COMP-3. DCL VAR DEC FIXED(03)

    VAR DECIMAL(3,2) 01 VAR PIC S9(01)V99 COMP-3. DCL VAR DECFIXED (3,2)

    Campos Alfanuméricos

    DB2 COBOL PL1VAR CHAR (20) 01 VAR PIC X(20) DCL VAR CHAR (20)

    VAR VARCHAR(20) 01 VAR. DCL VAR CHAR (20) VAR

    05 VAR-LEN PIC S9(04) COMP.

    05 VAR-TEXT PIC X(20). 

    Campos Data / Hora / Timestamp

    DB2 COBOL PL1VAR DATE 01 VAR PIC X(10). DCL VAR CHAR(10)

    VAR TIME 01 VAR PIC X(08). DCL VAR CHAR (08)

    VAR TIMESTAMP 01 VAR PIC X(26). DCL VAR CHAR (26)

    OBS - VAR,simbolizaonomedascolunasnatabelaquefuturamenteserãoutilizadascomovariáveisqueserãoutilizadasnosprogramas  

    SPUFI x COBOL

    COBOL

    *---------------------------------------*

     WORKING-STORAGE SECTION.

    *---------------------------------------*

    * DECLARACOES DAS VARIAVEIS DE AMBIENTE *

    *---------------------------------------*

    EXEC SQL

    INLUDE SQLCA

    END-EXEC.

    *---------------------------------------*

    * DECLARACOES DA TABELA – TBALUNOS *

    *---------------------------------------*

    EXEC SQL

    INCLUDE TBALUNOS

    END-EXEC

    INCLUDE

    SPUFI

     Não tem

    OincludenoCOBOLnãoobtémosdadosdatabelaemquestãoesimtrazparaaworkdoprogramaaestruturadatabela(colunas,atributos).

    COBOL

    *---------------------------------------*

    PROCEDURE DIVISION.

    *---------------------------------------*

    MOVE 10 TO MATRICULA

    MOVE ‘JOSE’ TO NOME 

    MOVE  ‘1988-05-15’ TO NASCIMENTO

    EXEC SQL

    INSERT INTO MFS.TBALUNOS

    (MATRICULA,

    NOME,

    NASCIMENTO)

    VALUES (:MATRICULA,

    :NOME,:NASCIMENTO)

    END-EXEC

    INSERT

    SPUFI

    INSERT INTO MFS.TBALUNOS

    (MATRICULA,

     NOME,

     NASCIMENTO)

     VALUES (10,

    ’ JOSE’ ,

    ’ 1988-05-15’ );

    NotequenoCOBOLasasvariáveisHOSTsãoalimentadasantesdainclusãonatabelaenacláusulaVALUESessasvariáveisestãoprecedidaspelos “:”

  • 8/19/2019 Db2 Mainframes

    10/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    17 18

    SPUFI x COBOL

    COBOL

     MOVE 10 TO MATRICULA

    EXEC SQL SELECT MATRICULA,

     NOME,

     NASCIMENTO

    INTO :MATRICULA,

    :NOME,:NASCIMENTO

    FROM MFS.TBALUNOS

     WHERE MATRICULA = :MATRICULA

    END-EXEC.

    SELECT

     Acesso direto

    SPUFI

    SELECT MATRICULA,

     NOME,

     NASCIMENTO

    FROM MFS.TBALUNOS

     WHERE MATRICULA = 10;

    Para fazer umacesso indexado (por uma determinadachave)em uma tabelabastaalimentaravariávelHOSTquerepresentaoíndiceecompará-lonacláusulaWHERE.

    SPUFI x COBOL

    COBOL

    *---------------------------------------*

    PROCEDURE DIVISION.

    *---------------------------------------*

     MOVE 10 TO MATRICULA

     MOVE ‘JOAO’ TO NOME 

     MOVE ‘1980-02-10’ TO NASCIMENTO 

    EXEC SQL

    UPDATE MFS.TBALUNOS

    SET NOME = :NOME,

     NASCIMENTO = :NASCIMENTO

     WHERE MATRICULA = :MATRICULA

    END-EXEC

    UPDATE

    SPUFI

    UPDATE MFS.TBALUNOS

    SET NOME = ‘JOAO’, 

     NASCIMENTO = ‘1980-02-10’ 

     WHERE MATRICULA = 10;

    No comando UPDATE também alimentamos as variáveis HOST antes daalteração.

    COBOL*---------------------------------------*

    PROCEDURE DIVISION.

    *---------------------------------------*

     MOVE 10 TO MATRICULA

    EXEC SQL DELETE

    FROM MFS.TBALUNOS

     WHERE MATRICULA = :MATRICULA

    END-EXEC

    DELETE

    SPUFIDELETE FROM MFS.TBALUNOS

     WHERE MATRICULA = 10;

    Para fazer umacesso indexado (por uma determinada chave) emuma tabela,bastaalimentaravariávelHOSTquerepresentaoíndiceecompará-lonacláusulaWHERE.

  • 8/19/2019 Db2 Mainframes

    11/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    19 20

    SPUFI x COBOL

    COBOL

    EXEC SQL DECLARE CURSOR01

    CURSOR FOR SELECT

    T1.MATRICULA,

    T1.NOME,

    T2.CURSO,

    T2.VALOR

    FROM MFS.TBALUNOSS T1,

     MFS.TBCURSOS T2

     WHERE T1.MATRICULA =

    T2.MATRICULA

    END-EXEC.

    *--------------------------------------*

    PROCEDURE DIVISION.

    *--------------------------------------*

    * ABRINDO O CURSOR *

    *--------------------------------------*

    EXEC SQL

    OPEN CURSOR01

    END-EXEC.

    *--------------------------------------** LENDO O CURSOR

    *--------------------------------------*

    EXEC SQL

    FETCH CURSOR01

    INTO :MATRICULA,

    :NOME :VI-NOME,

    :DESCRICAO :VI-DESC,

    :VALOR :VI-VALOR

    END-EXEC.

    *--------------------------------------*

    * FECHANDO O CURSOR

    *--------------------------------------*

    EXEC SQL

    CLOSE CURSOR01END-EXEC.

    JOIN – Acesso relacional

    SPUFI

    SELECT

    T1.MATRICULA,

    T1.NOME,

    T2.CURSO,

    T2.VALOR

    FROM MFS.TBALUNOS T1,

     MFS.TBCURSOS T2

     WHERE T1.MATRICULA =

    T2.MATRICULA;

    Para fazer um acesso entretabelasJOIN,devemoscriarumCURSOR, que acesse as 2tabelas com isso estaremosinformando ao DB2 que linhasde conteúdo da tabela,retornarãoaoprograma.

    OBS - Na definição do cursorpara o JOIN, criamos asvariáveiscomoprefixo“VI”,elasindicam se a tabela possuicolunasnulas.Umacolunanulaé uma coluna que não possuiconteúdo, as variáveis “VI” sãodefinidas na WORKING comouma HALF-WORD binária(S9(04) COMP), se seu valorapósocomandoseretornar-1avariávelemquestãoseránula. Para fazerumacesso sequencialemuma tabela, devemoscriarumCURSOR,

    comissoestaremosinformandoaoDB2queváriaslinhasdeconteúdodatabela,retornarãoaoprograma.OBS - A instrução de definição do CURSOR deve ser feita na WORKING-STORAGE SECTION do COBOL, já o comando de abertura (OPEN), leitura(FETCH)efechamento(CLOSE)databela,devemserfeitosemrotinasdiferentesdoprograma,localizadasnaPROCEDUREDIVISION.  

    SPUFI x COBOL

    COBOL

    *---------------------------------------*

     WORKING-STORAGE SECTION.

    *---------------------------------------*

    * DECLARANDO O CURSOR

    *---------------------------------------*

    EXEC SQL DECLARE CURSOR01

    CURSOR FOR

    SELECT MATRICULA,

     NOME,

     NASCIMENTO

    FROM MFS.TBALUNOS

    ORDER BY MATRICULA

    END-EXEC.

    *---------------------------------------*

    PROCEDURE DIVISION.

    *---------------------------------------*

    * ABRINDO O CURSOR *

    *---------------------------------------*

    EXEC SQL

    OPEN CURSOR01END-EXEC.

    *---------------------------------------*

    * LENDO O CURSOR

    *---------------------------------------*

    EXEC SQL FETCH CURSOR01

    INTO :MATRICULA,

    :NOME,

    :NASCIMENTO

    END-EXEC.

    *---------------------------------------*

    * FECHANDO O CURSOR

    *---------------------------------------*

    EXEC SQL CLOSE CURSOR01 END-EXEC.

    SELECT – Acesso sequencial

    SPUFI

    SELECT MATRICULA, NOME,

     NASCIMENTO

    FROM MFS.TBALUNOS;

  • 8/19/2019 Db2 Mainframes

    12/12

    DB2 para Mainframe DB2 para Mainframe

    DB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtdaDB2 -TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda

    21 21

    SQLCODE – Principais códigos de retorno do acesso ao DB2

    Os códigosderetornodo DB2são informadosna variávelSQLCODE,vejaabaixoalgunsvaloresmaisusuais: 

    CÓD. DESCRIÇÃO+100 Rownotfoundorendofcursor-102 Stringconstantistoolong-117 Thenumber of values youare tryingto INSERT does not matchthe

    number ofcolumns-180 Bad data in Date/Time/Timestamp String representation of DATE, TIME,TIMESTAMPisinvalid-181 Bad data in Date/Time/Timestamp Value for DATE, TIME, TIMESTAMPis invalid-199 Illegaluseofthespecifiedkeyword.-204 ObjectnotdefinedtoDB2-205 Columnnamenotinspecifiedtable-206 ColumndoesnotexistinanytableintheSELECT-224 FETCHcannotmakeanINSENSITIVEcursorSENSITIVE-229 ThelocalespecifiedinaSETLOCALEstatementwasnotfound.

    +231 FETCHbutyoudidaBEFOREorAFTERandyouarenotonavalidrow+304 Value cannot be assigned to this host variable because it is out of range-305 Nullindicatorneeded-311 Varchar,insertorupdate.Youdidn’tsetthe-LENfieldwiththerightdata length-501 CursornotopenonFETCH-502 Openingcursorthatisalreadyopen-503 UpdatingcolumnwhichneedstobespecifiedinFORUPDATEOF-530 ReferentialintegritypreventstheINSERT/UPDATE-545 CheckconstraintpreventstheINSERT/UPDATE-803 Duplicatekeyoninsertorupdate

    -805 DBRMorpackagenotfoundinplanIsplannamecorrect?-811 MorethanonerowretrievedinSELECTINTO-818 Planandprogram:timestampmismatch-911 Deadlockortimeout.Rollbackhasbeendone.913Yourprogramwasthevictimofadeadlockortimeout.NOrollbackhasbeendone.YoushoulddoaROLLBACK.-922 Authorizationneeded-927 Thelanguageinterfacewascalledbutnoconnectionhadbeen.