Apostila DB2 Para Desenvolvedores

287
Domini Treinamento – DB2 para Desenvolvedores - 1 - ÍNDICE INTRODUÇÃO AO DB2 ................................................................................................................................................................7 O QUE É UM B ANCO DE D ADOS RELACIONAL ?............................................................................................................................ 8 DB2 É UM DBMS R ELACIONAL ..................................................................................................................................................... 9 ESTRUTURA DE DADOS DO DB2.................................................................................................................................................. 10 NOMENCLATURA ..................................................................................................................................................................... 11 NOMENCLATURA ..................................................................................................................................................................... 12 INTEGRIDADE DE R EFERÊNCIA..................................................................................................................................................... 13 INTEGRIDADE DE R EFERÊNCIA ( CONT.) ...................................................................................................................................... 14 INTEGRIDADE DE R EFERÊNCIA (CONT.)...................................................................................................................................... 15 AMBIENTE DB2 .............................................................................................................................................................................16 C OEXISTÊNCIA ENTRE OS AMBIENTES ........................................................................................................................................ 17 O BJETOS DB2 ................................................................................................................................................................................. 18 O BJETOS DB2 (CONT .) ................................................................................................................................................................... 19 N OTAS .............................................................................................................................................................................................. 20 N OTAS (CONT.) ............................................................................................................................................................................... 21 N OTAS (CONT.) ............................................................................................................................................................................... 22 N OTAS (CONT.) ............................................................................................................................................................................... 23 ESTRUTURA DO DB2 ...................................................................................................................................................................... 24 ESTRUTURA DO DB2 (CONT .)....................................................................................................................................................... 25 UTILIZAÇÃO DA LINGUAGEM SQL ...................................................................................................................................26 U TILIZAÇÃO DA LINGUAGEM SQL .............................................................................................................................................. 27 U TILIZAÇÃO DA LINGUAGEM SQL (CONT .) ............................................................................................................................... 28 U TILIZAÇÃO DA LINGUAGEM SQL (CONT .) ............................................................................................................................... 29 L INGUAGEM SQL........................................................................................................................................................................... 30 L INGUAGEM SQL (CONT .) ............................................................................................................................................................ 31 L INGUAGEM SQL (CONT .) ............................................................................................................................................................ 32 DDL - DATA DEFINITION LANGUAGE......................................................................................................................................... 33 C REATE TABLE............................................................................................................................................................................... 34 D ADOS NUMÉRICOS ....................................................................................................................................................................... 35 D ADOS NUMÉRICOS (CONT .) ....................................................................................................................................................... 36 D ADOS CHARACTER S TRING........................................................................................................................................................ 37 D ADOS DATE / TIME ...................................................................................................................................................................... 38 N ULIDADE ....................................................................................................................................................................................... 39 N OT N ULL WITH D EFAULT........................................................................................................................................................... 40 C REATE V IEW................................................................................................................................................................................. 41 DML - DATA MANIPULATION L ANGUAGE................................................................................................................................. 42 TABELAS USADAS NOS EXEMPLOS .............................................................................................................................................. 43 TABELAS USADAS NOS EXEMPLOS (CONT .) ............................................................................................................................... 44 Q UERY ............................................................................................................................................................................................. 45 Q UERY EM FORMATO LIVRE......................................................................................................................................................... 46 S ELECT ...FROM............................................................................................................................................................................... 47 S ELECT DE TODAS AS COLUNAS.................................................................................................................................................. 48 C ONTROLE DE LINHAS ................................................................................................................................................................... 49 O PERADORES DE COMPARAÇÃO .................................................................................................................................................. 50

Transcript of Apostila DB2 Para Desenvolvedores

Page 1: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 1 -

ÍNDICE

INTRODUÇÃO AO DB2 ................................................................................................................................................................7 O QUE É UM BANCO DE DADOS RELACIONAL?............................................................................................................................8 DB2 É UM DBMS RELACIONAL.....................................................................................................................................................9 ESTRUTURA DE DADOS DO DB2.................................................................................................................................................. 10 NOMENCLATURA ..................................................................................................................................................................... 11 NOMENCLATURA ..................................................................................................................................................................... 12 INTEGRIDADE DE REFERÊNCIA..................................................................................................................................................... 13 INTEGRIDADE DE REFERÊNCIA (CONT.)...................................................................................................................................... 14 INTEGRIDADE DE REFERÊNCIA (CONT.)...................................................................................................................................... 15

AMBIENTE DB2.............................................................................................................................................................................16 COEXISTÊNCIA ENTRE OS AMBIENTES........................................................................................................................................ 17 OBJETOS DB2 ................................................................................................................................................................................. 18 OBJETOS DB2 (CONT .)................................................................................................................................................................... 19 NOTAS.............................................................................................................................................................................................. 20 NOTAS (CONT.)............................................................................................................................................................................... 21 NOTAS (CONT.)............................................................................................................................................................................... 22 NOTAS (CONT.)............................................................................................................................................................................... 23 ESTRUTURA DO DB2...................................................................................................................................................................... 24 ESTRUTURA DO DB2 (CONT .)....................................................................................................................................................... 25

UTILIZAÇÃO DA LINGUAGEM SQL...................................................................................................................................26 UTILIZAÇÃO DA LINGUAGEM SQL.............................................................................................................................................. 27 UTILIZAÇÃO DA LINGUAGEM SQL (CONT .)............................................................................................................................... 28 UTILIZAÇÃO DA LINGUAGEM SQL (CONT .)............................................................................................................................... 29 LINGUAGEM SQL........................................................................................................................................................................... 30 LINGUAGEM SQL (CONT .) ............................................................................................................................................................ 31 LINGUAGEM SQL (CONT .) ............................................................................................................................................................ 32 DDL - DATA DEFINITION LANGUAGE......................................................................................................................................... 33 CREATE TABLE............................................................................................................................................................................... 34 DADOS NUMÉRICOS....................................................................................................................................................................... 35 DADOS NUMÉRICOS (CONT .) ....................................................................................................................................................... 36 DADOS CHARACTER STRING........................................................................................................................................................ 37 DADOS DATE / TIME ...................................................................................................................................................................... 38 NULIDADE ....................................................................................................................................................................................... 39 NOT NULL WITH DEFAULT........................................................................................................................................................... 40 CREATE VIEW................................................................................................................................................................................. 41 DML - DATA MANIPULATION LANGUAGE................................................................................................................................. 42 TABELAS USADAS NOS EXEMPLOS.............................................................................................................................................. 43 TABELAS USADAS NOS EXEMPLOS (CONT .)............................................................................................................................... 44 QUERY ............................................................................................................................................................................................. 45 QUERY EM FORMATO LIVRE......................................................................................................................................................... 46 SELECT ...FROM............................................................................................................................................................................... 47 SELECT DE TODAS AS COLUNAS.................................................................................................................................................. 48 CONTROLE DE LINHAS................................................................................................................................................................... 49 OPERADORES DE COMPARAÇÃO.................................................................................................................................................. 50

Page 2: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 2 -

EXEMPLOS DE WHERE................................................................................................................................................................... 51 SELEÇÃO DE NULOS....................................................................................................................................................................... 52 SELEÇÃO DE NULOS (CONT .)........................................................................................................................................................ 53 MÚLTIPLAS CONDIÇÕES................................................................................................................................................................ 54 MÚLTIPLAS CONDIÇÕES (CONT.)................................................................................................................................................. 55 MÚLTIPLAS CONDIÇÕES (CONT.)................................................................................................................................................. 56 MÚLTIPLAS CONDIÇÕES (CONT.)................................................................................................................................................. 57 IN...................................................................................................................................................................................................... 58 BETWEEN......................................................................................................................................................................................... 59 PESQUISAS PARCIAIS..................................................................................................................................................................... 60 NEGAÇÃO ........................................................................................................................................................................................ 61 ORDER BY ....................................................................................................................................................................................... 62 ORDER BY (CONT .)......................................................................................................................................................................... 63 ORDER BY (CONT .)......................................................................................................................................................................... 64 SELECT DISTINCT ........................................................................................................................................................................... 65 SELECT DISTINCT (CONT .) ............................................................................................................................................................ 66 SELECT DE VALORES CALCULADOS............................................................................................................................................ 67 NOMEANDO A COLUNA RESULTADO............................................................................................................................................ 68 CONDIÇÕES COM VALOR CALCULADO....................................................................................................................................... 69 ‘ORDER BY’ POR VALOR CALCULADO....................................................................................................................................... 70 OPERADOR DE CONCATENAÇÃO.................................................................................................................................................. 71 FUNÇÕES DE COLUNA (COLUMN FUNCTIONS) .......................................................................................................................... 72 SUM AVG MAX MIN ...................................................................................................................................................................... 73 SUM AVG MAX MIN (CONT .)........................................................................................................................................................ 74 COUNT ............................................................................................................................................................................................. 75 CUIDADO COM NULOS................................................................................................................................................................... 76 CUIDADO COM NULOS................................................................................................................................................................... 77 LITERAIS.......................................................................................................................................................................................... 78 LITERAIS.......................................................................................................................................................................................... 79 GROUP BY ....................................................................................................................................................................................... 80 GROUP BY (CONT ).......................................................................................................................................................................... 81 GROUP BY (CONT .)......................................................................................................................................................................... 82 GROUP BY ... ORDER BY ............................................................................................................................................................... 83 GROUP BY ... HAVING ................................................................................................................................................................... 84 EXEMPLO DE HAVING.................................................................................................................................................................... 85 SELECT - 6 CLÁUSULAS............................................................................................................................................................... 86 EXECUÇÃO CONCEITUAL DO SELECT .......................................................................................................................................... 87 EXECUÇÃO CONCEITUAL DO SELECT (CONT.)........................................................................................................................... 88 EXEMPLOS DE HAVING (CONT .)................................................................................................................................................... 89 SUMÁRIO FUNÇÕES DE COLUNA.................................................................................................................................................. 90 FUNÇÕES ESCALARES (SCALAR FUNCTIONS) ............................................................................................................................ 91 FUNÇÕES ESCALARES.................................................................................................................................................................... 92 SUBSTR (STRING, INÍCIO, COMPRIMENTO).................................................................................................................................. 93 SUBSTR (STRING, INÍCIO, COMPRIMENTO) (CONT .)................................................................................................................... 94 LENGTH (ARGUMENTO)................................................................................................................................................................. 95 LENGTH (ARGUMENTO) (CONT.)............................................................................................................................................... 96 VALUE (ARG1, ARG2, ..., ARGN)................................................................................................................................................... 97 VALUE (ARG1, ARG2, ..., ARGN) (CONT .)................................................................................................................................. 98 FUNÇÕES DE CONVERSÃO............................................................................................................................................................. 99 DADOS DATE/TIME......................................................................................................................................................................100 ARITMÉTICA DATE/TIME............................................................................................................................................................101 ARITMÉTICA DE DATE/TIME (CONT ).........................................................................................................................................102 EXEMPLOS DATE/TIME................................................................................................................................................................103

Page 3: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 3 -

FUNÇÕES ESCALARES DATE/TIME ............................................................................................................................................104 FUNÇÕES ESCALARES DATE/TIME (CONT.)..............................................................................................................................105 FUNÇÕES ESCALARES DATE/TIME (CONT.)..............................................................................................................................106 VALORES CORRENTES.................................................................................................................................................................107 JOIN DE TABELAS.........................................................................................................................................................................108 JOIN DE TABELAS - INNER JOIN..................................................................................................................................................109 JOIN DE TABELAS - INNER JOIN (CONT .)...............................................................................................................................110 OUTER JOIN...................................................................................................................................................................................111 JOIN COM MAIS DE DUAS TABELAS ..........................................................................................................................................112 QUALIFICADORES.........................................................................................................................................................................113 QUALIFICADORES (CONT .)..........................................................................................................................................................114 JOIN DE UMA TABELA COM ELA MESMA ...................................................................................................................................115 JOIN DE UMA TABELA COM ELA MESMA (CONT .).....................................................................................................................116 UNIÃO............................................................................................................................................................................................117 UNIÃO (CONT .).........................................................................................................................................................................118 UNIÃO - EXEMPLO......................................................................................................................................................................119 UNION ALL VS. UNION................................................................................................................................................................120 SUBQUERY.....................................................................................................................................................................................121 EXEMPLO DE SUBQUERY.............................................................................................................................................................122 CONSIDERAÇÕES SUBQUERY......................................................................................................................................................123 SUBQUERY COM UMA LINHA......................................................................................................................................................124 SUBQUERY C/VÁRIAS LINHAS: ALL ........................................................................................................................................125 SUBQUERY C/VÁRIAS LINHAS: ALL (CONT.)..........................................................................................................................126 SUBQUERY C/VÁRIAS LINHAS: ANY OU SOME .......................................................................................................................127 SUBQUERY C/VÁRIAS LINHAS: ANY OU SOME (CONT .).........................................................................................................128 IN....................................................................................................................................................................................................129 IN (CONT .).....................................................................................................................................................................................130 SUBQUERY NUM HAVING...........................................................................................................................................................131 SUBQUERY CORRELACIONADO ..................................................................................................................................................132 SUBQUERY COM EXISTS - TESTANDO V OU F........................................................................................................................133 SUBQUERY COM EXISTS............................................................................................................................................................134

MANUTENÇÃO........................................................................................................................................................................... 135 INSERT DE UMA LINHA ................................................................................................................................................................136 INSERT DE MÚLTIPLAS LINHAS..................................................................................................................................................137 UPDATE DE COLUNAS..................................................................................................................................................................138 UPDATE DE COLUNAS (CONT )....................................................................................................................................................139 DELETE DE LINHAS......................................................................................................................................................................140 DELETE DE TODAS AS LINHAS ...................................................................................................................................................141

PROGRAMAÇÃO....................................................................................................................................................................... 142 PROGRAMA EM LINGUAGEM TRADICIONAL.............................................................................................................................143 PROGRAMAÇÃO............................................................................................................................................................................144 INSTRUÇÃO SQL ..........................................................................................................................................................................145 INSTRUÇÃO SQL (CONT .)............................................................................................................................................................146 VARIÁVEL HOST ...........................................................................................................................................................................147 VARIÁVEL HOST (CONT .)............................................................................................................................................................148 OUTROS EXEMPLOS.....................................................................................................................................................................149 VARIÁVEL HOST (CONT .)...........................................................................................................................................................150 VARIÁVEL HOST (CONT .)...........................................................................................................................................................151 VARIÁVEL HOST (CONT .)...........................................................................................................................................................152 VARIÁVEL HOST (CONT .)...........................................................................................................................................................153 DEFINIÇÃO DE VARIÁVEL HOST ................................................................................................................................................154

Page 4: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 4 -

DEFINIÇÃO DE VARIÁVEL HOST (CONT .)..................................................................................................................................155 DEFINIÇÃO DE VARIÁVEL HOST (CONT .)..................................................................................................................................156 DEFINIÇÃO DE VARIÁVEL HOST (CONT .)..................................................................................................................................157 COMMIT /ROLLBACK....................................................................................................................................................................158 COMMIT /ROLLBACK (CONT .) .....................................................................................................................................................159 LUW ................................................................................................................................................................................................160 LUW (CONT .).................................................................................................................................................................................161 COMMIT /ROLLBACK....................................................................................................................................................................162 SQLCA..........................................................................................................................................................................................163 SQLCA (CONT .)...........................................................................................................................................................................164 SQLCA (CONT .)...........................................................................................................................................................................165 FORMATO SQLCA .......................................................................................................................................................................166 SQL WARNING.............................................................................................................................................................................167 SQL WARNING (CONT .) ..............................................................................................................................................................168 AUXÍLIO À CODIFICAÇÃO............................................................................................................................................................169 INSTRUÇÃO WHENEVER..............................................................................................................................................................170 INSTRUÇÃO WHENEVER (CONT.)...............................................................................................................................................171 DCLGEN ......................................................................................................................................................................................172 DCLGEN (CONT .)........................................................................................................................................................................173 INSTRUÇÃO INCLUDE ...................................................................................................................................................................174

PREPARAÇÃO DE PROGRAMA COM SQL................................................................................................................... 175 PREPARAÇÃO DE PROGRAMA COM SQL...................................................................................................................................176 PREPARAÇÃO DE PROGRAMA COM SQL (CONT .)....................................................................................................................177 PRECOMPILADOR..........................................................................................................................................................................178 COMPILADOR / LINKAGE EDITOR / BIND..................................................................................................................................179 VISÃO GERAL “BIND” .................................................................................................................................................................180 VISÃO GERAL “BIND” (CONT .)...................................................................................................................................................181 VISÃO GERAL “BIND” (CONT .)...................................................................................................................................................182 PACKAGE ...................................................................................................................................................................................183 COLLECTION ............................................................................................................................................................................184 TOKEN DE CONSISTÊNCIA - PREP. DO PROGRAMA..........................................................................................185 PLANO - LIGAÇÃO ENTRE O PACKAGE E O LOAD MODULO.....................................................................................................186 PLANOS E PACKAGES...........................................................................................................................................................187 ERRO DE TIMESTAMP...........................................................................................................................................................188 BIND - OPÇÃO QUALIFIER.....................................................................................................................................................189 CURSOR..........................................................................................................................................................................................190 CURSOR (CONT .)...........................................................................................................................................................................191 SELECT COM FETCH.....................................................................................................................................................................192 PROCURE DEFINIR........................................................................................................................................................................193 PROCURE DEFINIR (CONT.).........................................................................................................................................................194 DELETE VIA CURSOR ...................................................................................................................................................................195 DELETE VIA CURSOR (CONT .)....................................................................................................................................................196 UPDATE VIA CURSOR ..................................................................................................................................................................197 UPDATE VIA CURSOR (CONT .) ...................................................................................................................................................198 MANIPULAÇÃO DE CURSOR ........................................................................................................................................................199 MANIPULAÇÃO DE CURSOR (CONT .) .........................................................................................................................................200 VARIÁVEL INDICADORA..............................................................................................................................................................201 VARIÁVEL INDICADORA (CONT.)...............................................................................................................................................202 VETOR DE VAR. INDICADORAS ..................................................................................................................................................203 VETOR DE VAR. INDICADORAS (CONT.)....................................................................................................................................204 OUTROS USOS DA VARIÁVEL INDICADORA..............................................................................................................................205

Page 5: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 5 -

ERROS DE ARITMÉTICA E CONVERSÃO - EXEMPLO................................................................................................................206 USO DA VARIÁVEL INDICADORA - RESUMO............................................................................................................................207 ESTRATÉGIA DE ACESSO .............................................................................................................................................................208 ESTRATÉGIA DE ACESSO (CONT.) ..............................................................................................................................................209 EXECUÇÃO DO PROGRAMA.........................................................................................................................................................210 EXECUÇÃO DO PROGRAMA (CONT .)..........................................................................................................................................211

CONSIDERAÇÕES SOBRE PROGRAMAÇÃO............................................................................................................... 212 RECOMENDAÇÕES DML .............................................................................................................................................................213 RECOMENDAÇÕES DML (CONT.)...............................................................................................................................................214 RECOMENDAÇÕES DML (CONT.)...............................................................................................................................................215 RECOMENDAÇÕES DML (CONT.)...............................................................................................................................................216 USO DO ÍNDICE .............................................................................................................................................................................217 EXPRESSÕES ARITMÉTICAS ........................................................................................................................................................218 CONDIÇÕES NOT...........................................................................................................................................................................219 USO DO “LIKE”.............................................................................................................................................................................220 SUBQUERIES..................................................................................................................................................................................221 EXPLAIN.........................................................................................................................................................................................222 EXPLAIN (CONT .)..........................................................................................................................................................................223 EXPLAIN (CONT .)..........................................................................................................................................................................224 PLAN_TABLE.................................................................................................................................................................................225 PLAN_TABLE (CONT.)..................................................................................................................................................................226 PLAN_TABLE (CONT.)..................................................................................................................................................................227

TÓPICOS ADICIONAIS ........................................................................................................................................................... 228

LOCKING ...................................................................................................................................................................................... 229 LOCKING........................................................................................................................................................................................230 GRANULARIDADE - LOCKSIZE TABLESPACE..........................................................................................................................231 GRANULARIDADE - LOCKSIZE TABLE......................................................................................................................................232 GRANULARIDADE - LOCKSIZE PAGE/ANY..............................................................................................................................233 GRANULARIDADE - LOCKSIZE ROW ........................................................................................................................................234 GRANULARIDADE DO LOCK........................................................................................................................................................235 MODO DO LOCK............................................................................................................................................................................236 DURACÃO DO LOCK (CONT .) ......................................................................................................................................................237 DURACÃO DO LOCK (CONT .) ......................................................................................................................................................238

AUTORIZAÇÕES ........................................................................................................................................................................ 239

SEGURANÇA DO DB2...................................................................................................................................................................240 ITENS PROTEGIDOS......................................................................................................................................................................241 IDENTIFICAÇÃO DO USUÁRIO DO DB2......................................................................................................................................242 COMANDO GRANT /REVOKE .......................................................................................................................................................243

UTILITÁRIOS.............................................................................................................................................................................. 244 UTILITÁRIOS DB2 ........................................................................................................................................................................245 UTILITÁRIOS DB2 (CONT.)..........................................................................................................................................................246 UTILITÁRIO ''LOAD'' .....................................................................................................................................................................247 EXECUTANDO O UTILITÁRIO ''LOAD''........................................................................................................................................248 EXECUTANDO O UTILITÁRIO ''LOAD'' (CONT.).........................................................................................................................249 LOAD - FASES DE EXECUÇÃO ...................................................................................................................................................250 LOAD - FASES DE EXECUÇÃO (CONT.) ....................................................................................................................................251 LOAD - CARTÕES DE CONTROLE ..............................................................................................................................................252 OPÇÕES RESUME E REPLACE......................................................................................................................................................253

Page 6: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 6 -

EXERCÍCIO - LOAD......................................................................................................................................................................254 OPÇÃO LOG (YES/NO).................................................................................................................................................................255 UTILITÁRIO '‘CHECK DATA''.......................................................................................................................................................256 CHECK DATA - FASES DE EXECUÇÃO ...................................................................................................................................257 OPÇÕES DO CHECK DATA .......................................................................................................................................................258 UTILITÁRIO '‘RUNSTATS''............................................................................................................................................................259 RUNSTATS - FASE DE EXECUÇÃO ..............................................................................................................................................260 OPÇÕES DO RUNSTATS................................................................................................................................................................261 OPÇÕES DO RUNSTATS (CONT .)..................................................................................................................................................262 CONSIDERAÇÕES SOBRE RUNSTATS..........................................................................................................................................263 UTILITÁRIO '‘COPY'' ...................................................................................................................................................................264 COPY - FASES DE EXECUÇÃO....................................................................................................................................................265 OPÇÕES DO COPY.........................................................................................................................................................................266 COPY INCREMENTAL E MERGECOPY.........................................................................................................................................267 RECOVER .......................................................................................................................................................................................268 RECOVER - FASES DE EXECUÇÃO...........................................................................................................................................269 RECOVER - AGILIZAÇÃO DO PROCESSO .................................................................................................................................270 RECOVER - PARA UM PONTO NO TEMP O................................................................................................................................271 RECOVER - PARA UM PONTO NO TEMP O................................................................................................................................272 DSNTIAUL – PROGRAMA SAMPLE PARA UNLOAD.........................................................................................................273 DSNTIAUL - DATA SETS E PARÂMETRO ........................................................................................................................274 DSNTIAUL - EXEMPLOS............................................................................................................................................................275 DSNTIAUL - EXEMPLOS............................................................................................................................................................276

STORED PROCEDURES INTRODUÇÃO.......................................................................................................................... 277 O QUE SÃO E PARA QUE SERVEM AS STORED PROCEDURES .............................................................................277

CALL SINTAXE .......................................................................................................................................................................... 279

CREATE PROCEDURE............................................................................................................................................................ 281 EXEMPLOS.................................................................................................................................................................................282 PARÂMETROS ..........................................................................................................................................................................283

PROGRAMAÇÃO DE SP.......................................................................................................................................................... 284 REGRAS GERAIS......................................................................................................................................................................285 COMMIT E ROLLBACK..........................................................................................................................................................286

Page 7: Apostila DB2 Para Desenvolvedores

Domini Treinamento – DB2 para Desenvolvedores - 7 -

Introdução ao DB2

Parte 1

Page 8: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 8 -

O que é um Banco de Dados Relacional?

COLUNA

Tabela DEPT

DCODIGO DNOME GERENTE DSUPERIOR

A00 SPIFFY COMP.SERVICE 000010

B01 PLANNING 000020 A00

000030 A00LINHA

...... ......

000030 A00

Um Banco de Dados Relacional é aquele que pode ser percebido externamente como uma coleção de tabelas.

D01 MARKETING

...... ......

Page 9: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 9 -

DB2 é um DBMS Relacional

Sistema de Gerênciade Banco de Dados

· Integridade e Segurança de Dados· Recuperação / Reinicio Integrados· Definição Dinâmica· Operação Contínua

Modelo de Dados LinguagemRelacional Sql

Dados vistos como Tabelas Definição, Manipulação eControle dos Dados

Projeto mais fácil

Page 10: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 10 -

Estrutura de Dados do DB2

- A Tabela Relacional

Tabela EMP

• Todos os dados e relacionamento entre dados são representados por valores de campo.

MATR SOBRENOME DEPARTAMENTO SALÁRIO

000010 CHRISTINE HAAS A00 52750000020 MICHAEL THOMPSON S01 41250000030 SALLY KWAN C01 38250000050 JOHN GEYER E01 40175000330 WING LEE E21 25370000340 JASON GOUNOT E21 23840

NOMEMATR SOBRENOME DEPARTAMENTO SALÁRIO

000010 CHRISTINE HAAS A00 52750000020 MICHAEL THOMPSON S01 41250000030 SALLY KWAN C01 38250000050 JOHN GEYER E01 40175000330 WING LEE E21 25370000340 JASON GOUNOT E21 23840

MATR SOBRENOME DEPARTAMENTO SALÁRIO

000010 CHRISTINE HAAS A00 52750000020 MICHAEL THOMPSON S01 41250000030 SALLY KWAN C01 38250000050 JOHN GEYER E01 40175000330 WING LEE E21 25370000340 JASON GOUNOT E21 23840

MATR SOBRENOME DEPARTAMENTO SALÁRIO

000010 CHRISTINE HAAS A00 52750000020 MICHAEL THOMPSON S01 41250000030 SALLY KWAN C01 38250000050 JOHN GEYER E01 40175000330 WING LEE E21 25370000340 JASON GOUNOT E21 23840

NOME

Page 11: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 11 -

NOMENCLATURA

Toda tabela e toda coluna

precisam ser nomeadas

O primeiro caracter precisa ser:A-Z, $, @, #

Demais caracteres:A-Z, $, @, #, 0-9, _

O nome da tabela é único

através do owner/creator/

schema

Nome da coluna é unico na

tabela

Page 12: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 12 -

NOMENCLATURA

Nome da Tabela Nome da Coluna

Nome da ColunaQualificado

Schema/Owner/Creator

Qualificado Nome da Tabela

Nome simples da Tabelada Tabela

(completo)

PROD EMPL

PROD.EMPL

EMPL LASTNAME

EMPL.LASTNAME

Page 13: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 13 -

Integridade de Referência

EMP (DEPENDENTE) DEPT (PAI)

NOME DEPT DEPTCODCARLOS Z13 Q3AMARIA A05 Z13···

···

··

Um depto. só pode serexcluído se não tivernenhum dependente.

CHAVE CHAVEPRIMÁRIA

INT.R E F .

ESTRANGE IRA

Page 14: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 14 -

Integridade de Referência (cont.)

• Chave Primaria(PK) – coluna(s) que garante(m) a unicidade das linhas. É a chave principal de uma tabela. Umatabela só pode ter uma Chave Primária.

• Chave Estrangeira(FK) – coluna(s) de uma tabela que contém valores da PK de outra tabela. Uma tabela pode ter mais de uma Chave Estrangeira.

• É implementado no DB2 via comandos SQL.

• No DB2 a Integridade de Referência obedece às seguintes regras:

§ uma chave primária tem valor único e não nulo.

§ uma chave estrangeira é nula ou tem valor correspondente na chave primária.

§ Tanto na inserção como na atualização de linhas, o DB2 força a observação destas regras

Page 15: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 15 -

Integridade de Referência (Cont.)

§ Na eliminação de uma linha da tabela PAI (PARENT TABLE), podem ocorrer situações conforme a regra de deleção estabelecida para a chave estrangeira.

• regra CASCADE: todas as linhas dependentes são eliminadas.

• regra SET NULL: a chave estrangeira das linhas dependentes são atualizadas com valor nulo.

• regra RESTRICT: a eliminação é impedida se ela possuir alguma linha dependente.

• Todas as tabelas associadas entre si via regra de IR formam um conjunto chamado de estrutura referencial (reference structure).

Page 16: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 16 -

Ambiente DB2

Page 17: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 17 -

Coexistência entre os Ambientes

BSDS LOG DB CAT DIR

TSO BATCH

C I C S

IMS/TM BATCHUTILITY

D B 2

T S O

Q M F

S P U F I

BSDS LOG DB CAT DIR

TSO BATCH

C I C S

IMS/TM BATCHUTILITY

D B 2

T S O

Q M F

S P U F I

Page 18: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 18 -

Objetos DB2

TS A

IDX1 IDX2 IDX4

NÃO DB2

TS B IDX3

TABLESPACE A

TABELA 1

TABELA 2

INDEX 1

INDEX 2

TABLESPACE B

TABELA 3

TABELA 4

INDEX 3

INDEX 4

DATABASE X

Page 19: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 19 -

Objetos DB2 (cont.)

NÃO DB2

T SIX

NÃO DB2

V O L 1

VOL3

VOL2

VOL4

VOLX

VOLY

NÃO DB2

STORAGE GROUP1 STORAGE GROUP2

TS

T STSIX

TSIX

TS

Page 20: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 20 -

Notas

• DATABASE (Banco de dados)

Conjunto de TABLESPACES e índices agrupados sob umcritério administrativo.

• TABLE (Tabelas)

Conjunto de linhas com as mesmas colunas (atributos).

• TABLESPACE

Conjunto da data sets VSAM LDS (linear data set) que contêm dados de uma ou mais tabelas

Suas páginas podem ser de 4K, 8K, 16K ou 32 K.

Page 21: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 21 -

Notas (cont.)

Tipos de TABLESPACE

− simples: as páginas de seus data sets podem conter dados de uma ou mais tabelas.

− segmentado: é dividido em segmentos(conjuntos de páginas) . Cada segmento só pode conter dados de uma tabela. Utilização recomendada pois permite ao DB2 uma administração melhor de espaço.

− particionado: recomendado para tabelas gigantes. É dividido em partições( data set VSAM). Requer um índice cluster com uma faixa de valores estabelecidos para cada partição. O DB2 se baseia nesta faixa para saber em qual partição gravar uma linha.

Page 22: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 22 -

Notas (cont.)

• INDEX (ÍNDICES)

É uma lista ordenada de valores que apontam para os dados nas tabelas. Utilizado para agilizar a leitura de dados. Pode ser utilizado também para forçar a unicidade dos dados.

Tipos:

UNIQUE : força a unidade dos dadosNORMAL : permite a duplicidade de dadosC L U S T E R : usado para manter a seqüência física dos dados no Tablespace

• V IEW• É um subconjunto de uma ou mais tabelas.• Sua utilização, em princípio, nada difere de uma tabela normal.• Conforme o caso uma VIEW pode ser somente leitura.

Page 23: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 23 -

Notas (cont.)

• STORAGE GROUP

• É um conjunto de volumes (discos) aonde os TABLESPACES ou índices são armazenados.

• Os discos devem ter o mesmo device type (3375, 3380 etc).• A utilização dos STG poupa o usuário da codificação de AMS de VS AM para

criar os data sets via DEFINE CLUSTER.• Os discos de um STG não precisam ser dedicados ao DB2.

• SYNONYM (SINÔNIMO)

É um nome alternativo (apelido) para uma tabela ou view. Uma vez criado, sua utilização é restrita a um Auth-id. (Proprietário ou usuário)

• ÁLIAS

É um nome alternativo (apelido) para uma tabela ou view. Utilizado mais como nome local de uma tabela remota. Seu uso é compartilhado.

Page 24: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 24 -

Estrutura do DB2

DATABASES

DIRETÓRIOCAT ÁLOGO

DB2DB2

LOGATIVA

LOG ARCHIVE BSDS IMAGE

C O P Y

Page 25: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 25 -

Estrutura do DB2 (cont.)

NOTAS:

• O catálogo é um conjunto de tabelas do DB2 e pode ser acessado através da linguagem SQL.

• O BSDS é um arquivo VSAM KSDS, que contém um histórico das Logs do DB2.

• O diretório é um conjunto de arquivos com informações do DB2, não podendo ser acessado por nenhum usuário.

Page 26: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 26 -

Utilização da Linguagem SQL

Page 27: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 27 -

Utilização da Linguagem SQL

DB2TSO Attach

DB2 I

IMS Attach CICS Attach

QMF PROGRAMA

USUÁRIOUSUÁRIO

PROGRAMAPROGRAMA

Page 28: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 28 -

Utilização da Linguagem SQL (cont.)

PROGRAMA SQL ESTÁTICOPROGRAMA SQL DINAMICOINTERATIVO

DB2

DDL

DATADEFINITIONLANGUAGE

SQL

STRUCTUREDQUERYLANGUAGE

DML

DATAMANIPULATIONLANGUAGE

DCL

DATACONTROLLANGUAGE

Page 29: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 29 -

Utilização da Linguagem SQL (cont.)

• DML (Data Manipulation Language) (Desenvolvimento)

• S E L E C T : pesquisa de dados (READ)• UPDATE : atualização de dados• DELETE : eliminação de dados• I N S E R T : inserção de dados

• DDL (Data Definition Language) (Suporte)

• CREATE : definição de um objeto (tabela, índice)• ALTER : alteração de um objeto• DROP : eliminação de um objeto

• DCL (Data Control Language) (Suporte/Desenvolvimento)

• GRANT : fornecer um privilégio• REVOKE : tirar um privilégio

Page 30: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 30 -

Linguagem SQL

• Qualquer acesso ao DB2 é feito através da linguagem SQL.

• O usuário ao emitir um comando SQL deve estar autorizado para a execução do mesmo.

• A linguagem SQL :

• NÃO É PROCEDURAL

• T E M O CONCEITO DE TEORIA DOS CONJUNTOS

• É S IMP L E S

Page 31: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 31 -

Linguagem SQL (cont.)

• Não é procedural .

Para cada dada pesquisa não precisamos informar os procedimentosnecessários como:

1. zere o contador2. abra o arquivo 3. leia um registro4. verifique se satisfaz o critério5. incremente o contador6. etc.

Com a instrução SELECT basta dizer:

1. quero os dados que satisfazem a condição X.

• O SQL trabalha com conjuntos e permite a execução dos operadores que são familiares para nós da matemática elementar.Quem não conhece os operadores União e Intersecção?Com uma instrução SELECT podemos implementar os seguintes operadores:

Page 32: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 32 -

Linguagem SQL (cont.)

..União A B UNION

..Intersecção A B JOIN

..Diferença A - B OUTER JOIN

..Produto Cartesiano A X B = {(x.y):x ∈ A e y ∈B }

Page 33: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 33 -

DDL - Data Definition Language

CREATE DEFINIÇÃO DE OBJETOS

ALTER ALTERAÇÃO DE UM OBJETO

DROP ELIMINAÇÃO DE UM OBJETO PREVIAMENTE DEFINIDO

Page 34: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 34 -

Create Table

• CREATE TABLE ORG (DEPTCOD CHAR(3) NOT NULL,DEPTNOME VARCHAR(36) NOT NULL,GERENTE CHAR(6),DIVISAO CHAR(8) NOT NULL WITH DEFAULT,

PRIMARY KEY(DEPTCOD))IN DBXX.TSXX

• CREATE TABLE STAFF(ID CHAR(6) NOT NULL,NOME VARCHAR(12) NOT NULL,...DEPT CHAR(3),

PRIMARY KEY(ID),FOREIGN KEY(DEPT) REFERENCES ORG ON DELETE CASCADE)IN DBYY.TSYY

• ALTER TABLE STAFF ADD COLX DECIMAL (8,2)

Page 35: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 35 -

Dados Numéricos

Definição para ColunasDefinição para Colunas

** 1 < = m < = 2121 < = n < = 53

TIPO DE DADO DESCRIÇÃO FAIXA

SMALLINT Inteiros -32.768 + 32.767

INTEGER Inteiros -2.147.483.648INT +2.147.483.647DECIMAL (X,Y) Decimais X=total de dígitos

Y=casas decimaisX <= 31

FLOAT (m) precisão simples 5.4e-79 to 7.2e+75REAL ponto flutuante

FLOAT dupla precisão 5.4e-79 to 7.2e+75FLOAT (n) ponto flutuante** DOUBLE PRECISION

Para DECIMAL, defina X com número impar

Page 36: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 36 -

Dados Numéricos (cont.)

• S MALLINT é uma half word (2 bytes)

• INTEGER é uma full word (4 bytes)

• DECIMAL armazena números em decimal compactado. A faixa de valores depende da quantidade de casas decimais.

• Critério de escolha do tipo de dado

• faixa de valores requerido

• tipo de comparação necessária para os processamentos Comparação entre números de tipos diferentes implica em overhead necessário para conversão e riscos maiores devido a erros induzidos por arredondamento.

Page 37: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 37 -

Dados Character String

Definição para ColunasDefinição para Colunas

** O tamanho máximo de uma coluna do tipo VARCHAR depende do tamanho da página do Tablespace.

TIPO DE DADO DESCRIÇAO TAMANHO

CHAR (x) string fixo x caracteres(máximo 254)

VARCHAR (x) string de 0 a 254 **tam. variável caracteres

LONG VARCHAR(x) string de x > 254 **tam. Variável caracteres

Page 38: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 38 -

Dados Date / Time

TIPO DE DADO FORMATO INTERNO

DATE aaaammdd

TIME hhmmss

TIMESTAMP aaaammddhhmmsssnnnnnn(nnnnnn =microsegundos )

Definição para ColunasDefinição para Colunas

(4 bytes)

(3 bytes)

(10 bytes)

Page 39: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 39 -

Nulidade

Uma coluna pode ser:

• NOT NULL o valor deve ser fornecido

• NOT NULL WITH DEFAULTvalor pode ser omitido e assume default

• NULLABLE o valor pode ser omitido

um valor NULO: NÃO É ZERONÃO É BRANCOÉ DESCONHECIDO

Page 40: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 40 -

Not Null With Default

Para uma coluna ‘not null with default ‘ o sistema fornece o valor em caso de omissão.

• Zero para colunas numéricas

• Branco para colunas fixed length caracter

• Comprimento zero para colunas variable length character

• Time• Date• Timestamp

Valores Correntes

Page 41: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 41 -

Create View

CREATE VIEW V_DEPT(VCODIGO,VNOME)AS SELECT CODIGO, DNOME FROM TAB_DEPTWHERE DCODIGO LIKE ‘A%’

Page 42: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 42 -

DML - Data Manipulation Language

SELECT ACESSA DADOS

UPDATE ATUALIZA CAMPOS

DELETE REMOVE LINHAS

INSERT INSERE NOVAS LINHAS

Page 43: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 43 -

Tabelas Usadas nos Exemplos

X. STAFFID NOME D E P T CARGO ANOS SALARIO COMIS

10 SANTANA 20 GER 7 18357.5020 ORSINI 20 VENDAS 8 18171.25 612.4530 DANTAS 38 GER 5 17506.75 -40 O’BRIEN 38 VENDAS 6 18006.00 846.5550 SOUZA 15 GER 10 20659.80 -60 SUZUKI 38 VENDAS - 16808.30 650.2570 AL MEIDA 15 VENDAS 7 16502.83 1152.0080 JAMES 20 ATEND - 13504.60 128.2090 KOONITZ 42 VENDAS 6 18001.75 1386.70

100 PLOTZ 42 GER 7 18352.80 -110 NGAN 15 ATEND 5 12508.20 206.60120 NAUGHTON 38 ATEND - 12954.75 180.00130 YAMAGUCHI 42 ATEND 6 10505.90 75,60140 FRAYE 51 GER 6 21150.00 -150 OLIVEIRA 51 VENDAS 6 194 56.50 637.65160 MOLINARI 10 GER 7 22959.20 -170 KERMISCH 15 ATEND 4 12258.50 110.10180 ABRAHAMS 38 ATEND 3 12009.75 236.50190 SNEIDER 20 ATEND 8 14252.75 126.50200 SCOUTTEN 42 ATEND - 11508.60 84.20210 L U 10 GER 10 20010.00 -220 SMITH 51 VENDAS 7 17654.50 992.80230 LUNDQUIST 51 ATEND 3 13369.80 189.65240 DANIELS 10 GER 5 19260.65 -250 WHEELER 51 ATEND 6 14460.00 513.30260 JONES 10 GER 12 21234.00 -270 L E A 66 GER 9 18555.50 -280 WILSON 66 VENDAS 9 18674.50 811.50290 PINHO 84 GER 10 19818.00 -300 DAVIS 84 VENDAS 5 15454.50 806.10310 GRAHAM 66 VENDAS 13 21000.00 200.30320 GONZALES 66 VENDAS 4 16858.20 844.00330 BURKE 66 ATEND 1 10988.00 55.50340 VIEIRA 84 VENDAS 7 17844.00 1285.00350 GAFNEY 84 ATEND 5 13030.50 188.00

ID NOME D E P T CARGO ANOS SALARIO COMIS

10 SANTANA 20 GER 7 18357.5020 ORSINI 20 VENDAS 8 18171.25 612.4530 DANTAS 38 GER 5 17506.75 -40 O’BRIEN 38 VENDAS 6 18006.00 846.5550 SOUZA 15 GER 10 20659.80 -60 SUZUKI 38 VENDAS - 16808.30 650.2570 AL MEIDA 15 VENDAS 7 16502.83 1152.0080 JAMES 20 ATEND - 13504.60 128.2090 KOONITZ 42 VENDAS 6 18001.75 1386.70

100 PLOTZ 42 GER 7 18352.80 -110 NGAN 15 ATEND 5 12508.20 206.60120 NAUGHTON 38 ATEND - 12954.75 180.00130 YAMAGUCHI 42 ATEND 6 10505.90 75,60140 FRAYE 51 GER 6 21150.00 -150 OLIVEIRA 51 VENDAS 6 194 56.50 637.65160 MOLINARI 10 GER 7 22959.20 -170 KERMISCH 15 ATEND 4 12258.50 110.10180 ABRAHAMS 38 ATEND 3 12009.75 236.50190 SNEIDER 20 ATEND 8 14252.75 126.50200 SCOUTTEN 42 ATEND - 11508.60 84.20210 L U 10 GER 10 20010.00 -220 SMITH 51 VENDAS 7 17654.50 992.80230 LUNDQUIST 51 ATEND 3 13369.80 189.65240 DANIELS 10 GER 5 19260.65 -250 WHEELER 51 ATEND 6 14460.00 513.30260 JONES 10 GER 12 21234.00 -270 L E A 66 GER 9 18555.50 -280 WILSON 66 VENDAS 9 18674.50 811.50290 PINHO 84 GER 10 19818.00 -300 DAVIS 84 VENDAS 5 15454.50 806.10310 GRAHAM 66 VENDAS 13 21000.00 200.30320 GONZALES 66 VENDAS 4 16858.20 844.00330 BURKE 66 ATEND 1 10988.00 55.50340 VIEIRA 84 VENDAS 7 17844.00 1285.00350 GAFNEY 84 ATEND 5 13030.50 188.00

Page 44: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 44 -

Tabelas Usadas nos Exemplos (cont.)

X. ORG

DEPTCOD DEPTNOME GERENTE DIVISÃO LOCAL

10 MATRIZ 160 C E N T R O SÃO PAULO15 CAMPINAS 50 SUDESTE CAMPINAS20 RIO 10 SUDESTE R. JANEIRO38 MINAS 30 SUDESTE B. HORIZONTE42 BAHIA 100 NORDESTE SALVADOR51 R E C I F E 140 NORDESTE R E C I F E66 RIO GRANDE 270 SUL PORTO ALEGRE84 PARANÁ 290 SUL CURIT IBA

Page 45: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 45 -

Query

SEQUÊNCIA OBRIGATÓRIA:

SELECT NOME, ANOS, SALÁRIO - Diz quais as colunas desejadas

FROM X. STAFF - Diz de quais tabelas

WHERE DEPT = 38 - Diz quais linhas selecionar

O R D E R B Y NOME - Diz como ordenar o resultado

A menor informação que a linguagem SQL necessita para atender uma solicitação:

SELECT ∗ FROM X.STAFF

Page 46: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 46 -

Query em Formato Livre

SELECT NOME, ANOS, SALARIO FROM X.STAFF WHERE DEPT = 38 ORDER BY NOME

OBS: APESAR DA QUERY PODER SER ESCRITA EM FORMATO LIVRE, QUANDO SE ESCREVE DE MANEIRA ESTRUTURADA FICA MELHOR PARA VISUALIZAR.

Page 47: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 47 -

Select...From

• SELECT algumas colunas da tabela

• Lista as colunas desejadas na seqüência de esquerda para direita• Vírgulas separa as colunas (obrigatórias)

• FROM lista de tabelas

• Simples : EMP• Qualificado: AUTHID. EMP

Exemplo

SELECT DEPTNOME, DEPTCODFROM X.ORG

Resultado: DEPTNOME DEPTCODMATRIZ 10CAMPINAS 15RIO 20MINAS 38. .

Page 48: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 48 -

Select de Todas as Colunas

Para selecionar todas as colunas de uma tabela na mesma seqüência em que foram definidas no comando CREATE TABLE:

SELECT *FROM X.ORG

Resultado:

DEPTCOD DEPTNOME GERENTE DIVISÃO LOCAL10 MATRIZ 160 CENTRO SÃO PAULO15 CAMPINAS 50 SUDESTE CAMPINAS20 RIO 10 SUDESTE R. JANEIRO38 MINAS 30 SUDESTE B.HORIZONTE

OBS.: EVITAR O USO DO SELECT *

Page 49: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 49 -

Controle de Linhas

• WHERE

• traz certas linhas• estabelece condições

Exemplo: Listar empregados do departamento 20

SELECT DEPT, NOME,CARGO, COMISFROM X.STAFFWHERE DEPT = 20

Resultado:

DEPT NOME CARGO COMIS

20 SANTANA G E R -20 ORSINI VENDAS 612.4520 JAMES ATEND 128.2020 SNEIDER ATEND 126.50

Page 50: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 50 -

Operadores de Comparação

= Igual< > or ¬= Diferente

> Maior> = Maior ou Igual< Menor< = Menor ou Igual¬> Não maior¬< Não menor

SELECT MATR, COMISFROM X.STAFF

WHERE COMIS = 1000

SELECT NOME, DEPT, ANOSFROM X.STAFF

WHERE CARGO < > ‘GER’

Page 51: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 51 -

Exemplos de Where

• Selecionar linhas através de dado numérico

SELECT DEPT, NOME,CARGOFROM X.STAFF

WHERE DEPT = 20

• Selecionar linhas através de dado alfanumérico

SELECT NOME, CARGO, COMISFROM X.STAFF

WHERE NOME = ‘SANTANA’

Page 52: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 52 -

Seleção de Nulos

• Valor nulo como critério de SELECT

SELECT NOME, CARGO, COMISFROM X.STAFF

WHERE COMIS IS NULL

Resultado:

NOME CARGO COMIS

SANTANA GER -DANTAS GER -SOUZA GER -PLOTZ GER -

Page 53: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 53 -

Seleção de Nulos (cont.)

• Valor não é nulo como critério de SELECT

SELECT NOME, CARGO, COMISFROM X.STAFF

WHERE COMIS IS NOT NULL

Resultado:

NOME CARGO COMIS

ORSINI VENDAS 612.45O’BRIEN VENDAS 846.55SUZUKI VENDAS 650.25ALMEIDA VENDAS 1152.00JAMES ATEND 128.20

Page 54: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 54 -

Múltiplas Condições

• Operadores para múltiplas condições

AND

OR• Dadas duas condições

CARGO = ‘VENDAS’ SALÁRIO < 17000

Para ter ambas satisfeitas: AND

WHERE CARGO = ‘VENDAS’ AND SALÁRIO < 17000

Resultado:

NOME CARGO SALÁRIO

SUZUKI VENDAS 16808.30ALMEIDA VENDAS 16502.83

Page 55: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 55 -

Múltiplas Condições (cont.)

Para ter qualquer uma satisfeitas: OR

WHERE CARGO = ‘VENDAS’ OR SALÁRIO < 17000

Resultado:

NOME CARGO SALÁRIO

ORSINI VENDAS 18171.25O’BRIEN VENDAS 18006.00SUZUKI VENDAS 16808.30ALMEIDA VENDAS 16502.83JAMES ATEND 13504.60

Page 56: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 56 -

Múltiplas Condições (cont.)

Usar parênteses para separar as condições AND, OR

WHERE (CARGO = ‘VENDAS’ AND COM > 1200)

OR ANOS > 10

Resultado:

NOME CARGO ANOS COMIS

KOONITZ VENDAS 6 1386.70JONES GER 12 -GRAHAM VENDAS 13 1200.30VIEIRA VENDAS 7 1285.00

Page 57: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 57 -

Múltiplas Condições (cont.)

não eqüivale a:

WHERE CARGO = ‘VENDAS’

AND (COMIS > 1200 OR ANOS > 10)

Resultado:

NOME CARGO ANOS COMIS

KOONITZ VENDAS 6 1386.70GRAHAM VENDAS 13 200.30VIE IRA VENDAS 7 1285.00

Page 58: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 58 -

IN

• Valor deve coincidir com algum elemento da lista

WHERE DEPT IN (38, 20, 42)

equivale a:

Múltiplos ORs para a mesma coluna:

WHERE DEPT = 38 OR DEPT = 20 OR DEPT = 42

NEGAÇÃO: NOT IN

Page 59: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 59 -

Between

• Para selecionar um intervalo fechado de valores

SELECT NOME, CARGO, ANOSFROM X.STAFFWHERE ANOS BETWEEN 9 AND 11 Extremidades inclusive

equivale a:

SELECT NOME, CARGO, ANOSFROM X.STAFFWHERE ANOS >= 9

AND ANOS <= 11

Resultado: NOME CARGO ANOSSOUZA G E R 10L U G E R 10LEA G E R 9WILSON VENDAS 9PINHO G E R 10

Page 60: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 60 -

Pesquisas Parciais

Para pesquisar um subconjunto de caracteres: L I KE% = Conjunto de caracteres quaisquer_ = Um caracter qualquer

Exemplos:

1. WHERE NOME LIKE ‘G%’ inclui: GRAHAMGONZALESGAFNEY

2. WHERE NOME LIKE ‘%SON’ inclui: WILSON ***JASON

3. WHERE NOME LIKE ‘%M%N%’ inclui: MOLINARI

4. WHERE NOME LIKE ‘_ _’ inclui: LU (TAM=2 BYTES )

5. WHERE NOME LIKE ‘_R%’ inclui: FRAYE(R na 2ª posição) GRAHAM

*** VARCHAR

Page 61: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 61 -

Negação

• Para negar o teste:

WHERE NOME NOT LIKE ‘G%’

exclui: GRAHAMGONZALESGAFNEY

WHERE ANOS NOT BETWEEN 9 AND 11

exclui ANOS de 9 a 11

Page 62: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 62 -

Order By

• Para classificar numa sequência especificada:

Lista classificada do pessoal do depto. 84

SELECT NOME, CARGO, ANOSFROM X.STAFFWHERE DEPT = 84ORDER BY NOME

Resultado:NOME CARGO ANOS

DAVIS VENDAS 5GAFNEY VENDAS 7PINHO ATEND 5VIE IRA G E R 10

OBS.:

Primeiro seleciona e depois classifica.

Para pequenos volumes pode ser usado sem problemas.

Page 63: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 63 -

Order By (cont.)

•Para classificar pelas coluna (s) em ordem ASC endente (default) ou DESC endente

SELECT NOME, CARGO, ANOSFROM X.STAFFWHERE DEPT = 84ORDER BY CARGO, ANOS DESC

Resultado:NOME CARGO ANOSGAFNEY ATEND 5PINHO G E R 10VIE IRA VENDAS 7DAVIS VENDAS 5

ORDER BY ANOS DESC, CARGO

Resultado:NOME CARGO ANOSPINHO GER 10VIE IRA VENDAS 7GAFNEY ATEND 5DAVIS VENDAS 5

Page 64: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 64 -

Order By (cont.)

• Colunas classif icadas devem ser referenciadas pelo SELECT.

• Nulos são considerados como valor mais alto.

• Podemos especificar colunas para o ORDER BY fornecendo um número que indica a posição da mesma na cláusula SELECT. O ORDER BY é o único que permite isto. Podemos também referenciar um ALIAS.

• ORDER BY classifica uma tabela resultante. Logo deve ser S E MPRE a ÚNICA e a ÚLTIMA a aparecer numa instrução S E L E C T .

• Usar sempre que desejar as linhas segundo uma ordem específica.

Page 65: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 65 -

Select Distinct

• A palavra chave DISTINCT deve aparecer logo depois do SELECT.• Classificação ocorre pelas colunas da esquerda para a direita.• ‘ORDER BY’ pode ser usada para controlar a classificação.

EXEMPLO: SELECT DEPT DEPTFROM X.STAFF 20

203838381510

.

.Para eliminar linhas duplicadas:

SELECT DISTINCT DEPT DEPTFROM X.STAFF 10

152038.

Page 66: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 66 -

Select Distinct (cont.)

MÚLTIPLAS -COLUNAS

SELECT DISTINCT DEPT, CARGO DEPT CARGO

10 GER15 ATEND15 GER15 VENDAS20 ATEND20 GER20 VENDAS38 ATEND

Page 67: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 67 -

Select de Valores Calculados

+ SOMA * MULTIPLICAÇÃO- SUBTRAÇÃO / DIVISÃO

Total de ganho de cada pessoa do DEPT 20

SELECT ID, SALÁRIO, COMIS, SALÁRIO + COMIS FROM X.STAFFWHERE DEPT = 20

Resultado:ID SALÁRIO COMIS COL1

10 18357.50 - - (1)20 18171.25 612.45 18783.7080 13504.60 128.20 13632.80190 14252.75 126.50 14379.25

OBS.: NÃO FAZ EXPONENCIAÇÃO.(1) Quando uma das colunas a serem somadas contiver

nulos, não é efetuado o calculo.

Page 68: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 68 -

Nomeando a coluna resultado

SELECT ID, SALÁRIO, COMIS, SALÁRIO + COMIS AS RENDIMENTOSFROM X.STAFFWHERE DEPT = 20ORDER BY RENDIMENTOS

Resultado:ID SALÁRIO COMIS RENDIMENTOS

80 13504.60 128.20 13632.80190 14252.75 126.50 14379.2520 18171.25 612.45 18783.70 10 18357.50 - -

Page 69: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 69 -

Condições com Valor Calculado

Pessoa cujo salário mais comissão excede $20.000

SELECT NOME, SALÁRIO + COMISFROM X.STAFFWHERE SALARIO + COM > 20000

Resultado:

NOME COL1

OLIVEIRA 20094.15GRAHAM 21200.30

Page 70: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 70 -

‘Order By’ Por Valor Calculado

EXEMPLO 1:

SELECT NOME, SALÁRIO + COMISFROM X.STAFFWHERE SALARIO + COMIS > 20000ORDER BY 2 DESC

Resultado:

NOME COL1

GRAHAM 21200.30OLIVEIRA 20094.15

EXEMPLO 2:

SELECT CARGO, SALÁRIO + COMISFROM X. STAFFORDER BY CARGO, 2

Page 71: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 71 -

Operador de Concatenação

string1 | | string2 string1string2

‘ABC’ | | ‘XYZ ‘ABCXYZ’

TABELA X (COLUNAS varchar : snome nome)SNOME NOME MIDJONES JOHN PMARQUES FRANCO X

···

···

··

SELECT SNOME || ‘, ‘ || NOME || ‘ ‘ || MID || ‘.‘FROM TABELA X

Resultado :JONES, JONES P .MARQUES, FRANCO X.

··

··

··

·

Page 72: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 72 -

Funções de Coluna (Column Functions)

Transforma dados de uma coluna em um único valor.

Dados numéricos

SUM - Total dos valores de uma coluna

AVG - Média dos valores de uma coluna

Quaisquer tipos de dados

MIN - Menor valor de uma coluna

MAX - Maior valor de uma coluna

COUNT - Número de ocorrências

Page 73: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 73 -

Sum Avg Max Min

EXEMPLO

SELECT SUM(SALÁRIO), MIN(COMIS), MAX(COMIS)FROM X.STAFFWHERE DEPT = 56

Resultado:

COL1 COL2 COL3

86076,20 17245,89 550844,60

OBS.: Valor nulo não são considerados em funções de coluna, EXCETO para a função COUNT(*).

Page 74: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 74 -

Sum Avg Max Min (cont.)

• Gera um único valor a partir de um conjunto de valores de uma ún ica coluna.

• O resultado não contém detalhes de linhas individuais.

• Podem ser pedidas mais de uma função para a mesma coluna, conforme o exemplo.

• Nulos são excluídos.

• Precisão (parte inteira, casa decimal) deriva da coluna.

• Para a função AVG de uma coluna DECIMAL (p,s) o resultado terá precisão (15,15-p+s).

• Expressões do seguinte tipo também podem ser utilizadas.

AVG(SALÁRIO + COMIS)

Page 75: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 75 -

Count

COUNT (*) Número de linhas que satisfazem a condição where.Nulos são contados .

COUNT (DISTINCT nome-coluna) - Número de valores distintos na coluna.Nulos não são contados .

Contar as pessoas cujo salário exceda$ 18.000 e seus respectivos departamentos.Mostre a média salarial.

SELECT COUNT(DISTINCT DEPT),COUNT(*),AVG(SALÁRIO)FROM X.STAFFWHERE SALARIO>18000

Resultado: C O L 1 COL2 COL3

8 16 19604.190625000

Page 76: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 76 -

Cuidado com Nulos

SUM(SALARY)+SUM(BONUS)+SUM(COMM)VERSUS

SUM(SALARY+BONUS+COMM)

EMPNO SALARY BONUS COMM SALARY+BONUS+COMM000010 1000 500 100 1600000020 2000 NULL 300 NULL000030 2500 400 NULL NULL000040 1500 100 400 2000------ ------ ----- ---- -----------------Sum: 7000 1000 800 --> 8800 3600

====== ===== ==== ====

Page 77: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 77 -

Cuidado com Nulos

2-4

53-

A B

SUM (A) = ...SUM (B) = ...

SUM (A) = ...COUNT(*)

SUM (A + B ) = ...

AVG (A) = ...

Page 78: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 78 -

Literais

• Literais podem ser mostradas no resultado de um SELECT.

• Podem ser úteis quando usadas com funções de coluna que não exibem cabeçalhos.

• Podemos selecionar apenas uma cadeia de caracteres conforme exemplo a seguir:

SELECT ‘TESTE XYZ’ FROM TABELAZ

(é necessário que a tabela exista).

Page 79: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 79 -

Literais

SELECT AVG(COMIS), SUM(COMIS)FROM X.STAFF

C O L 1 COL2

513.31 12319.45

SELECT ‘MED:’ , AVG(COMIS),‘SOMA: ‘, SUM(COMIS)

FROM X.STAFF

C O L 1 C O L 2 C O L 3 C O L 4

MED: 513.31 SOMA: 12319.45

Page 80: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 80 -

Group By

SELECT SUM(SALÁRIO),SUM(COMIS)

FROM X.STAFFWHERE CARGO <> ‘GER’GROUP BY DEPT

C O L 1 C O L 2

41269.53 1468.7045928.60 867.1559778.80 1913.30

. .

. .

. .

SELECT SUM(SALÁRIO),SUM(COMIS)

FROM X.STAFFWHERE CARGO <> ‘GER’

C O L 1 C O L 2

146976.93 4249.15

Agrupa um conjunto de linhas.Com GROUP BY, a função de coluna calcula um valor para cada agrupamento.

Page 81: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 81 -

Group By (cont)

SELECT DEPT, SUM(SALÁRIO), SUM(COMIS)FROM X.STAFFWHERE CARGO <> ‘GER’GROUP BY DEPT

Resultado:

DEPT C O L 1 C O L 2

15 41269.53 1468.7020 45928.60 867.1538 59778.80 1913.30. . .. . .. . .

Page 82: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 82 -

Group By (cont.)

NOTAS:

•Podemos fazer ‘GROUP BY’ sobre múltiplas colunas.

GROUP BY DEPT, CARGO

•As colunas referenciadas pelo SELECT que não sejam função precisam ser agrupadas pelo ‘GROUP BY’(ver pagina anterior). O não agrupamento neste caso gera erro.

•O resultado contém uma linha sumário para cada grupo.

•Todos os valores nulos são considerados como um grupo.

Page 83: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 83 -

Group By ... Order By

• Para garantir a ordem de classificação é necessário usar Order B y

SELECT DEPT, SUM(SALÁRIO), SUM(COMIS) FROM X.STAFFWHERE CARGO <> ‘GER’GROUP BY DEPTORDER BY 3

Resultado:

DEPT COL1 C O L 2

20 45928.60 867.15. . .. . .15 41269.53 1468.70. . .. . .38 59778.80 1913.30

Page 84: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 84 -

Group By ... Having

CONDIÇÕES SOBRE GRUPOS

SELECT . . . FROM..

WHERE.....

F I LTROS

GROUP BY...

HAVING....

WHERE - escolhe linhasHAVING - escolhe grupos

É executado sempre após GROUP BY

Page 85: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 85 -

Exemplo de Having

SELECT DEPT, SUM(SALÁRIO)FROM X.STAFFGROUP BY DEPT

DEPT C O L 1

10 83643.4515 61929.3320 64286.1038 77285.5542 58369.05. .. .. .

SELECT DEPT, SUM(SALÁRIO)FROM X.STAFFGROUP BY DEPTHAVING SUM(SALÁRIO) > 65000

DEPT C O L 1

10 83643.4538 77285.55. .. .. .

Page 86: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 86 -

Select - 6 Cláusulas

SELECT DEP, JOB, AVG(SAL)

FROM EMPL

WHERE JOB <> 'M'

GROUP BY DEP, JOB

HAVING AVG(SAL) > 28000

ORDER BY 3 DESC

Page 87: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 87 -

Execução conceitual do Select

Page 88: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 88 -

Execução conceitual do Select (cont.)

Page 89: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 89 -

Exemplos de Having (cont.)

Os exemplos mostram que o SELECT e o HAVING podem usar funções diferentes.

Média salarial por departamentoapenas dos não-gerentes dos departamentoscom mais de 3 pessoas.

SELECT DEPT, AVG(SALÁRIO) FROM STAFFWHERE CARGO <> ‘GER’GROUP BY DEPTHAVING COUNT(*) > 3

Média salarial dos não-gerentes por departamento, que tenhamsomente pessoas com no mínimo 5 anos de experiência.Listar em ordem descendente por média.

SELECT DEPT, AVG(SALÁRIO)FROM STAFFWHERE CARGO <> ‘GER’GROUP BY DEPTHAVING MIN(ANOS) >= 5ORDER BY 2 DESC

Page 90: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 90 -

Sumário Funções de Coluna

• Funções de Coluna só podem ser especificadas em:

SELECT

HAVING

• SELECT pode especif icar somente

Funções de Coluna

Colunas especificadas no ‘GROUP BY’

• HAVING pode especificar

Funções de Coluna sobre qualquer coluna contida numa tabela especificada no FROM

• Funções de Coluna não podem ser embutida uma dentro da outra.

Page 91: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 91 -

Funções Escalares (Scalar Functions)

• Transforma um único valor em outro valor.

• Funções STRING

• Funções de Conversão

• Funções Date/Time

Page 92: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 92 -

Funções Escalares

• Ao contrário das funções de coluna que transformam um conjunto de valores de uma coluna num único valor, as funções escalares operam somente sobre um único valor.

• Funções Escalares podem ser embutidas dentro da outra.

• Ex.: SUBSTR (SUBSTR (...)...)

• Funções de Coluna podem ser argumento de uma função escalar.

• Ex.: SUBSTR (MAX(...)...)

• Funções Escalares podem ser argumento de uma função de coluna.

• Ex.: MAX (SUBSTR(...)).

Page 93: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 93 -

Substr (string, início, comprimento)

• Se o comprimento não for especificado, a função pega todo o resto.

• Se a posição do início ultrapassar o final do string teremos erro.

• Se o início + comprimento ultrapassar o final do string teremos erro.

• Substring de nulo é nulo

Page 94: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 94 -

Substr (string, início, comprimento) (cont.)

SELECT DEPTNOME, SUBSTR(DEPTNOME, 1, 4)FROM X.ORG

Resultado:DEPTNOME C O L 1

MATRIZ MATRCAMPINAS CAMPRIO RIOMINAS MINABAHIA BAHI

SELECT DEPTCOD, DIVISAOFROM X.ORGWHERE SUBSTR(DIVISAO, 3) =‘EAS’

Page 95: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 95 -

Length (argumento)

• Fornece o tamanho de uma coluna do tipo caracter.

• Se o argumento é nulo, o resultado também será nulo.

Page 96: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 96 -

Length (argumento) (cont.)

SELECT NOME, LENGTH(NOME), CARGO, LENGTH(CARGO)FROM X.STAFF

Obs: NOME tem tamanho variávelCARGO tem tamanho fixo

Resultado:

NOME C O L 1 CARGO C O L 2

SANTANA 7 G E R 6SILVAl 6 VENDAS 6DANTAS 6 G E R 6

. . . .

. . . .

Page 97: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 97 -

Value (arg1, arg2, ..., argn)

• Dada uma lista de argumentos, esta função faz a varredura da esquerda para a direita até encontrar o primeiro valor não nulo .

• Todos os argumentos devem ser do mesmo tipo de dado (todos numéricos ou todos caracteres).

• Se todos os argumentos forem nulos, o resultado será nulo.

Page 98: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 98 -

Value (arg1, arg2, ..., argn) (cont.)

• Dada uma lista de argumentos, mostra o primeiro não nulo.

SELECT ID, COMIS, BONUS, VALUE(COMIS, BONUS, 0)FROM X.STAFF

Resultado :

ID COMIS BONUS C O L 1

10 - - 0.0020 612.45 534.25 612.4530 - 345.89 345.8940 846.55 - 846.55

Page 99: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 99 -

Funções de Conversão

•Converte um tipo de representação em outro.

DECIMAL, FLOAT, INTEGER : converte número em númeroDIGITS : converte número em alfaH E X : converte alfa / número em hexa

SELECT DECIMAL(SALARIO, 9, 1),INTEGER(SALARIO)FROM.STAFFWHERE ID = 55

se coluna SALARIO é (DEC (7,2)) : 17506.75

Resultado:C O L 1 C O L 2

17506.7 17506

Page 100: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 100 -

Dados Date/Time

DATE, TIME, TIMESTAMP armazenados como decimal compactado sem sinal.

TIPO DE DADO FORMATO INTERNODATE aaaammddTIME hhmmssTIMESTAMP aaaammddhhmmssnnnnnn

Programas lidam só com FORMATO EXTERNO: string de caracteres

PADRÃO FormatoTIME

TAMANHO FormatoDATE

TAMANHO

ISO hh.mm.ss 8 bytes aaaa-mm-dd 10 bytesUSA hh: mm AM

hh: mm PM8 bytes mm/dd/aaaa 10 bytes

EUR hh.mm.ss 8 bytes dd.mm.aaaa 10 bytesJ IS hh:mm:ss 8 bytes aaaa-mm-dd 10 bytes

Timestamp: aaaa-mm-dd-hh.mm.ss.nnnnnn 26 bytes

Page 101: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 101 -

Aritmética Date/Time

• Somente subtração

horário - horário = = > duração em hhmmss (packed decimal (6,0))

data - data = = = = => duração em aaaammdd (packed decimal (8,0))

• Na adição é necessário usar DURAÇÃO ROTULADA:

Número “n“ seguido da palavra chave: YEARS, MONTHS, DAYS, HOURS,MINUTES, SECONDS, MICROSECONDS

horário ± duração rotulada = = > horário

data ± duração rotulada = = = = > data

• Pode usar MIN, MAX, COUNT

• Não pode usar SUM e AVG

Page 102: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 102 -

Aritmética de Date/Time (cont)

• Somando/Subtraindo duração

data + ou - duração (data) - - Resulta em dataDATACOL1 + 3 MONTHS

horário +or - duração (tempo) - - Resulta em horárioTEMPCOL1 - 30 MINUTES - 20 SECONDS

timestamp +or - duração (data) - - Resulta em TIMESTAMPtimestamp +or - duração (tempo) TSTCOL + 2 DAYS - 3 HOURSTMSRCOL + 50000 MICROSECONDS

• Subtraindo datas e horas

data - data - - Resulta em duraçãoDATACOL1 - DATACOL2DATACOL1 - ‘1984-12-20’

Horário - Horário - - Resulta em duraçãoTEMPCOL1 - TEMPCOL2‘11:30 PM’- TEMPCOL1

Page 103: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 103 -

Exemplos Date/Time

SELECT PRJCOD, DATAINI + 1 YEAR, DATAFIM - 2 MONTHS ....

Resultado : PR JCOD C O L 1 C O L 2

AX001 31.01.1991 31.01.2005AX002 28.02.1989 30.06.1988AX003 01.02.1988 01.12.1986

SELECT PRJCOD, DATAFIM - DATAINI, HRFIM - HRINI ....

Resultado: PR JCOD C O L 1 C O L 2

AX001 00150200 153000AX002 00000602 000000AX003 00000000 074159

TABLE DTPRJDOC DATAINI DATAFIM HRINI HRFIM

AX001 19900131 20050331 000000 153000AX002 19880228 19880831 000000 000000AX003 19870201 19870201 160000 234159

TABLE DTPRJDOC DATAINI DATAFIM HRINI HRFIM

AX001 19900131 20050331 000000 153000AX002 19880228 19880831 000000 000000AX003 19870201 19870201 160000 234159

Page 104: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 104 -

Funções Escalares Date/Time

• CHAR: controla formato externo de dados date/time

SELECT CHAR(HRFIM, ISO), CHAR(HRFIM, USA)FROM DTWHERE PRJCOD = ‘AX001’

Resultado :

COL1 C O L 2

15.30.00 03.30 PM

Page 105: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 105 -

Funções Escalares Date/Time (cont.)

• DAY, MONTH, YEAR, HOUR, MINUTE, SECOND, MICROSECOND

- EXTRAI parte de uma data, horário ou timestamp- Resulta num inteiro binário

SELECT DAY(DATAINI), MONTH(DATAINI), YEAR (DATAINI)FROM DTWHERE YEAR(DATAINI) > 1988

Resultado:

C O L 1 C O L 2 COL3

31 1 1990

Page 106: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 106 -

Funções Escalares Date/Time (cont.)

• DAYS

Número de dias desde 01/01/0001

SELECT DATAFIM - DATAINI,DAYS(DATAFIM) - DAYS(DATAINI)FROM DTWHERE PRJCOD = ‘AX001’

Resultado:

COL1 C O L 2

00150200 5538(nº.dias)

• DATE, TIMEExtrai data ou horário de um timestamp

Page 107: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 107 -

Valores Correntes

•CURRENT DATE

Data de hoje

•CURRENT TIME

Horário corrente

•CURRENT TIMESTAMP

Data e horário corrente convertido para timestamp

SELECT * FROM DTWHERE DATAINI < CURRENT DATE - 90 DAYS

Page 108: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 108 -

Join de Tabelas

DEPTCOD DEPTONOME GERENTE10 MATRIZ 16015 CAMPINAS 5020 RIO 1038 MINAS 3042 BAHIA 100

ID NOME DEPT10 SANTANA 2020 ORSINI 2030 DANTAS 3840 O’BRIEN 3850 SOUZA 1570 ALMEIDA 1580 JAMES 2090 KOONITZ 42. . .. . .

DEPTCOD DEPTONOME GERENTE10 MATRIZ 16015 CAMPINAS 5020 RIO 1038 MINAS 3042 BAHIA 100

ID NOME DEPT10 SANTANA 2020 ORSINI 2030 DANTAS 3840 O’BRIEN 3850 SOUZA 1570 ALMEIDA 1580 JAMES 2090 KOONITZ 42. . .. . .

ID NOME DEPT10 SANTANA 2020 ORSINI 2030 DANTAS 3840 O’BRIEN 3850 SOUZA 1570 ALMEIDA 1580 JAMES 2090 KOONITZ 42. . .. . .

• Tabelas são relacionadas via dados comuns (domínios)• Jo in é implementado pela cláusula FROM ou WHERE• Não faça J OIN de tabelas sem o predicado de join, o resultado é um

produto cartesiano entre as tabelas

Page 109: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 109 -

Join de Tabelas - Inner Join

Listar o nome dos departamentos e seus respectivos gerentes

SELECT DEPTNOME, NOMEFROM X.STAFF, X.ORGWHERE GERENTE = ID

DEPTNOME GERENTE DIVISÃORIO 10 .MINAS 30 WESTERNBAHIA 100 .

. . .

ID NOME30 DANTAS10 SANTANA100 PLOTZ

. .

X .STAFF

X.ORG

Resultado:

DEPTNOME NOME

RIO SANTANA

MINAS DANTAS

BAHIA PLOTZ

Page 110: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 110 -

Join de Tabelas - Inner Join (cont.)

Listar o nome dos departamentos da divisão Western e seus gerentes

SELECT DEPTNOME, NOMEFROM X.STAFF, X.ORGWHERE DIVISÃO = ‘WESTERN’

AND GERENTE = ID

Resultado: DEPTNOME NOMEMINAS DANTAS

Outra maneira de escrever o Inner Join

SELECT DEPTNOME, NOMEFROM X.STAFF INNER JOIN X.ORG

ON GERENTE = IDWHERE DIVISÃO = ‘WESTERN’

Page 111: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 111 -

Outer Join

DEPTNOME GERENTE DIVISÃOSÃO PAULO . .MINAS 30 WESTERNBAHIA 100 C P CRIO 10 WESTERN

ID NOME10 SANTANA20 ORSINI30 DANTAS40 O’BRIEN100 PLOTZ

SELECT DEPTNOME, NOMEFROM X.STAFF LEFT OUTER JOIN X.ORG

ON GERENTE = ID

Resultado:

DEPTNOME NOME

RIO SANTANA- ORSINIMINAS DANTAS- O’BRIENBAHIA PLOTZ

•OPÇÕES: LEFT JOIN, RIGHT JOIN e FULL JOIN

X. STAFF

X. ORG

Listar todos empregados, e para os gerentes, o depto que eles gerenciamListar todos empregados, e para os gerentes, o depto que eles gerenciam

Page 112: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 112 -

Join com Mais de Duas Tabelas

SELECT ID, NOME, DEPT, DEPTNOME, CODPEDIDOFROM X.STAFF, X.ORG, X.VENDASWHERE DEPT = DEPTCOD AND ID = COD_RVENDA

Resultado:

ID NOME DEPT DEPTNOME CODPEDIDO

20 ORSINI 20 RIO 345620 ORSINI 20 RIO 666720 ORSINI 20 RIO 358020 ORSINI 20 RIO 701040 O’BRIEN 38 MINAS 4567

Listar os empregados, o nome do departamento aonde trabalham e seus respectivos pedidos de vendas.

Listar os empregados, o nome do departamento aonde trabalham e s eus respectivos pedidos de vendas.

REGRA: o número de predicados join é igual ao número de tabelas menos 1

Page 113: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 113 -

Qualificadores

X.STAFF

X.ORG

SELECT NOME,DEPTNOME,CODIGOFROM X.STAFF, X.ORGWHERE CARGO = ‘GER’AND DEPT = CODIGO

CODIGO NOME DEPT CARGO20 SANTANA 20 GER20 ORSINI 20 VENDAS. . . .. . . .

CODIGO DEPTNOME GERENTE10 MATRIZ 160

10 RIO 10. . .. . .

Listar o nome dos gerentes, e respectivos nome e código de departamentos

Page 114: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 114 -

Qualificadores (cont.)

SOLUÇÃO

• Qualificar com nome de tabela

SELECT NOME, X.ORG.CODIGO, DEPTNOMEFROM X.STAFF, X.ORGWHERE CARGO = ‘GER’

AND DEPT = X.ORG.CÓDIGO

• Qualificador correlacionado

SELECT NOME, O.CODIGO, DEPTNOMEFROM X.STAFF, X.ORG OWHERE CARGO = ‘GER’

AND DEPT = O.CODIGO

Page 115: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 115 -

Join de uma Tabela com ela mesma

Liste os empregados que ganham mais que os seus gerentes

1. Obter informações do empregado na X.STAFF (E)

ID NOME ... SALÁRIO ... DEPT80 J A ME S 19456.50 20

2. Obter informações do departamento na X.ORG

DEPTCOD DEPTNOME ... GERENTE . . .20 RIO 10

3. Obter informações do gerente na X.STAFF (G)

ID NOME ... SALÁRIO ... DEPT10 SANTANA 18357.50 20

4. Comparar o salário dos dois

5. Se a condição é satisfeita, colocar a linha na tabela resultante e partir para o próximo empregado.

Page 116: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 116 -

Join de uma Tabela com ela mesma (cont.)

SOLUÇÃO:

SELECT E.NOME, E.SALARIO, G.NOME, G.SALARIOFROM STAFF E, ORG D, STAFF GWHERE E.DEPT = D.DEPTCOD AND D.GERENTE = G.IDAND E.SALARIO > G.SALARIO

Resultado:

NOME SALARIO NOME SALARIO

OLIVEIRA 19456.50 SANTANA 18357.50. . . .

•Qualificadores são necessários porque existe uma necessidade de tratar duas linhas da mesma tabela como se fossem pertencentes a tabelas distintas.

Page 117: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 117 -

União

UNION faz a união de tabelas resultados

SELECT A1, A4 FROM TBLAWHERE A2 = ‘Z’ Resultado

UNION . .. .

SELECT B1, B4 FROM TBLAWHERE B1 > = ‘N’

Resultado

. .

. .

. .

Page 118: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 118 -

União (cont.)

• Queries são executadas serialmente.

• A quantidade de colunas deve ser a mesma em todos os S E L E C T s .

• Os tipos de dados das colunas correspondente devem ser iguais.

• O operador union une as tabelas resultantes e elimina as linhas duplicadas, que implica num SORT.

• O operador UNION ALL também une tabelas mas não elimina linhas duplicadas. Não chama o sort portanto.

Page 119: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 119 -

União - Exemplo

A faixa de salários dos atendentes atingiria a faixa de vendasse fosse dado um aumento de 17% e 2% respectivamente?

SELECT CARGO, SALÁRIO * 1.17FROM X.STAFFWHERE CARGO = ‘ATEND’

UNION

SELECT CARGO, SALÁRIO * 1.02FROM X.STAFFWHERE CARGO = ‘VENDAS’ORDER BY 2 DESC

Resultado:

CARGO C O L 1

VENDAS 21420.0000. .VENDAS 17144.4660ATEND 16918.2000VENDAS 16832.8866. .

Page 120: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 120 -

Union All Vs. Union

UNION ALL UNION

- Não faz classificação - Classifica- Não elimina duplicados - Elimina duplicados

SELECT NOMEFROM X.CANDIDATOSWHERE ENDEREÇO LIKE ‘%SP’

UNION ALL UNION

SELECT SOBRENOMEFROM X.ENTREVISTADOSWHERE SIT = ‘REP’

NOME NOME ==>do primeiro SELECT

JACOBS ARANTESMARQUES JACOBSARANTES MARQUESSILVA SILVAMARQUESJACOBS

Page 121: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 121 -

Subquery

• É UM SELECT EMBUTIDO DENTRO DE UM S E L E C T

• RESULTADO DE UMA SUBQUERY É USADO PELO SELECT “EXTERNO”

Page 122: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 122 -

Exemplo de Subquery

• Encontrar a média salarial da companhia (SUBQUERY)

SELECT AVG(SALARIO) FROM X.STAFF 16675.64

• Comparar o salário de cada funcionário com o resultado

SELECT NOME, SALÁRIO FROM X.STAFFWHERE SALARIO > (SELECT AVG(SALARIO) FROM X.STAFF)

Resultado:NOME SALARIOSANTANA 18357.50ORSINI 18171.25

Listar os funcionários com salário superior à média da companhia

RESULTADO DA SUBQUERYRETORNADO PARA O NIVELSUPER IOR

RESULTADO DA SUBQUERYRETORNADO PARA O NIVELSUPERIOR

RESULTADO SOMENTEDO SELECT DE NÍVELMAIS ALTO

RESULTADO SOMENTEDO SELECT DE N ÍVELMAIS ALTO

X. STAFFNOME SALARIO

Page 123: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 123 -

Considerações Subquery

• Pode ser usado no WHERE ou no HAVING

• Pode ser encadeado

• Deve estar à direita do operador na condição de seleção

• Deve ser colocado entre parênteses.

• Antes da Versão 7 do DB2, o subquery deve selecionar apenas uma coluna.

• O subquery pode retornar uma ou mais linhas e isto acaba determinando o operador a ser usado na condição de busca.

• NÃO pode conter UNION, UNION ALL ou O R D E R B Y

• Muitas vezes é citado como SUBSELECT. Prefira SUBQUERY.

Page 124: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 124 -

Subquery com uma Linha

Mostrar o funcionário com o maior salário da empresa

SELECT NOME, SALARIO FROM X.STAFFWHERE SALARIO =

(SELECT MAX(SALARIO) FROM X.STAFF)

Resultado :

NOME SALARIO

MOLINARI 22959.20

Page 125: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 125 -

Subquery C/Várias Linhas: ALL

Lista classificada dos funcionários com salário superiora toda e qualquer média salarial departamental.

• Encontrar média salarial para cada departamento.

SELECT AVG (SALÁRIO) FROM X.STAFF GROUP BY DEPT

Resultado:

20865.86250000015482.33250000016000.000000000

20865.86250000015482.33250000016000.000000000

Page 126: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 126 -

Subquery C/Várias Linhas: ALL (cont.)

SELECT NOME, SALÁRIO FROM X.STAFFWHERE SALÁRIO >

ALL (SELECT AVG(SALÁRIO)FROM X.STAFF GROUP BY DEPT)

ORDER BY NOME

Resultado :

NOME SALARIO

FRAYE 21150.00GRHAM 21000.00JONES 21234.00MOLINARE 22959.20

• Compare o salário de cada funcionário com a lista devolvida pela SUBQUERY

Page 127: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 127 -

Subquery C/Várias Linhas: Any ou Some

20865.86250000015482.332500000

20865.86250000015482.332500000

Lista classificada dos funcionários com salário maior que a média salarial de algum departamento

Lista classificada dos funcionários com salário maior que a média salarial de algum departamento

• Encontrar média salarial para cada departamento .

SELECT AVG (SALÁRIO) FROM X.STAFFGROUP BY DEPT

Resultado:

Page 128: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 128 -

Subquery C/Várias Linhas: Any ou Some (cont.)

SELECT NOME, SALÁRIO FROM X.STAFFWHERE SALÁRIO > ANY (SELECT AVG (SALÁRIO)

FROM X.STAFFGROUP BY DEPT)

ORDER BY NOME

Resultado:

NOME SALÁRIODANIEL 19260.25DAVIS 15484.50EDWARDS 17844.00. .. .

• Compare o salário de cada funcionário com a lista devolvida pela SUBQUERY

Page 129: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 129 -

IN

Lista de gerentes da divisão Sul

SELECT DEPT, NOME FROM X.STAFFWHERE CARGO = ‘GER’

AND DEPT IN (SELECT DEPTCODFROM X.ORGWHERE DIVISÃO = ‘SUL’)

• SUBQUERY resulta numa lista de DEPTCODs da divisão Sul (66 e 84).

• ‘IN’ eqüivale a uma série de ‘OR...=‘sobre uma coluna

• “=ANY” pode substituir “IN”

Page 130: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 130 -

IN (cont.)

SELECT DEPT, NOME FROM X.STAFFWHERE CARGO = ‘GER’

AND DEPT = ANY (SELECT DEPTCODFROM X.ORGWHERE DIVISÃO = ‘SUL’)

Page 131: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 131 -

Subquery Num Having

Liste os departamentos cuja média salarial é inferior à media dacompanhia, com as suas respectivas médias. O salário dos gerente s não deve ser considerado. Ordene pela média.

Liste os departamentos cuja média salarial é inferior à media dacompanhia, com as suas respectivas médias. O salário dos gerentes não deve ser considerado. Ordene pela média.

SELECT DEPT, AVG(SALÁRIO) FROM X.STAFFWHERE CARGO <> ‘GER’GROUP BY DEPTHAVING AVG(SALÁRIO) < (SELECT AVG(SALÁRIO)

FROM X.STAFFWHERE CARGO <>‘GER’)

ORDER BY 2 DESC

Resultado: DEPT COL1

66 16880.17500000051 16235.20000000084 15443.00000000020 15309.530000000

Page 132: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 132 -

Subquery Correlacionado

Listar os empregados com salário superior à média de seus respectivos departamentos.

Listar os empregados com salário superior à média de seus respectivos departamentos.

SELECT NOME, SALÁRIOFROM X.STAFF CVWHERE SALÁRIO > (SELECT AVG(SALÁRIO)

FROM X.STAFFWHERE DEPT = CV.DEPT)

• Um subselect correlacionado é executado a cada linha devolvida aoselect externo.

• Deve ser evitado.

Page 133: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 133 -

Subquery com EXISTS - Testando V ou F

• Este é um operador que tem como argumento um select.

• Esta subquery não devolve nenhuma tabela resultante .

• EXISTS devolve V ou F e como faz parte de uma search condition, determina uma eventual execução ou não do SELECT externo.

• EXISTS pode ser negado por um NOT.

Page 134: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 134 -

Subquery com EXISTS

Liste os gerentes ganhando menos que $18.000 se existir pelos menos um gerente com salário superior a $22.000.

Liste os gerentes ganhando menos que $18.000 se existir pelos menos um gerente com salário superior a $22.000.

SELECT ID,NOME, SALÁRIO, DEPTFROM X.STAFFWHERE CARGO = ‘GER’

AND SALARIO < 18000AND EXISTS (SELECT * FROM X.STAFF

WHERE CARGO = ‘GER’AND SALÁRIO > 22000)

ID NOME SALÁRIO DEPT

30 MARENCHI 17506.75 38

• VERDADEIRO/FALSO NO SELECT INTERNO

Determina se o SELECT externo será executado.

Page 135: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 135 -

Manutenção

Page 136: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 136 -

Insert de uma Linha

INSERT INTO PROJ

VALUES (‘MA2114’,’ ‘,’B01’,’ ‘,NULL,CURRENT DATE,NULL)

- - OU - -

INSERT INTO PROJ

(DEPT, PCODIGO, PNOME, RESP, DATAIN)

VALUES (‘B01’,‘MA2114’,’ ‘,’ ‘,CURRENT DATE)Obs.- formato obrigatório no banco.

Resultado:

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 ? 19880920 ?

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 ? 19880920 ?

Page 137: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 137 -

Insert de Múltiplas Linhas

INSERT INTO TESTPROJSELECT * FROM PROJ

WHERE DEPT LIKE ‘B%’

OR DEPT IN(‘E11’, `E21’, ’E31’)

Resultado:

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM

PL2100 ................. B01 000020 001.00 19870101 19870915OP1010 OPERAÇÃO E11 000090 005.00 19860101 19880501OP2010 SUP. SISTEMA E21 000100 004.00 19820101 19880201OP2011 ................... E21 000320 001.00 19820101 19880201OP2012 ................... E21 000330 001.00 19820101 19880201OP2013 ................. E21 000340 001.00 19820101 19880201

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM

PL2100 ................. B01 000020 001.00 19870101 19870915OP1010 OPERAÇÃO E11 000090 005.00 19860101 19880501OP2010 SUP. SISTEMA E21 000100 004.00 19820101 19880201OP2011 ................... E21 000320 001.00 19820101 19880201OP2012 ................... E21 000330 001.00 19820101 19880201OP2013 ................. E21 000340 001.00 19820101 19880201

TESTPROJ

Page 138: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 138 -

Update de Colunas

UPDATE RESTPROJSET EQUIPE = EQUIPE * 2, DATAFIM = NULL,

DATAINI = ‘1987-06-01’WHERE DEPT = ‘B01’

ANTES :

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920 19890201001.00

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920 19890201001.00

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19870601 ?002.00

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19870601 ?

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19870601 ?002.00

Page 139: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 139 -

Update de Colunas (cont)

um subconjunto de linhas

UPDATE PESSOAL

SET SALARIO = SALARIO + 300

WHERE CARGO = ‘ATEND’todas as linhas:

UPDATE PESSOAL

SET ANOS = ANOS + 1

Obs.: Cuidado com este tipo de alteraçao, pois todas as linhas serão afetadas

Page 140: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 140 -

Delete de Linhas

ANTES :

DELETE FROM TESTPROJ

WHERE DEPT = ‘B01’

DEPOIS :

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920 19890201001.00

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920 19890201001.00

Page 141: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 141 -

Delete de Todas as Linhas

DELETE FROM TESTPROJDELETE FROM TESTPROJ

Obs.: Cuidado com este tipo de deleção, pois todas as linhas serão afetadas

DEPOIS :

ANTES:

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920 19890201001.00

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM.......... .......... ............. .......................... ................. ....

OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201............. ................. .... ............ ........... ............. ...............MA2114 B01 19880920 19890201001.00

PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM

Page 142: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 142 -

Programação

Parte 2

Page 143: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 143 -

Programa em Linguagem Tradicional

NÃO RELACIONAL RELACIONAL

COBOLSQL SQLP L I embutidoFORTRAN

A S S E MB L E RC

ARQUIVOSREGISTROS

CURSORVAR.HOST

TABELASLINHAS

Page 144: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 144 -

Programação

• O SQL trabalha com tabelas e linhas. É uma linguagem desenvolvida para manipular conjuntos.

• Já as linguagens tradicionais trabalham com arquivos e registros e nãoconseguem reconhecer tabelas e linhas.

• Para podermos trabalhar com o SQL dentro de programas emlinguagens tradicionais, devemos codificá-lo usando delimitadores especiais. Esta técnica é conhecida como SQL embutido e assemelha-

se ao COMAND LEVEL do CICS.

• Para simularmos um arquivo com seus registros, trabalha-se com oCURSOR do DB2. Assim, o programa pode acessar linhas de umatabela para uma manipulação qualquer.

• As colunas não são manipuladas diretamente pelas linguagens tradicionais. Para isto são utilizadas as variáveis HOST que “hospedam” o conteúdo das colunas.

Page 145: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 145 -

Instrução SQL

END-EXEC.EXEC SQL

DELIMITADORES

COBOL EXEC SQLinstrução SQL END-EXEC.

PL/I EXEC SQLinstrução SQL ;

FORTRAN EXEC SQLX instrução SQL

ASSEMBLER EXEC SQLinstrução SQL X

INSTRUÇÃO SQL entre DELIMITADORES

DELETE FROM DEPT

Page 146: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 146 -

Instrução SQL (cont.)

• O compilador das linguagens tradicionais não entende a linguagem SQL

• Para separar uma instrução SQL da codificação normal do programa, são utilizados delimitadores que são diferentes para cada linguagem adotada.

• O pré-compilador do DB2 localiza as instruções SQL por meio dos delimitadores e os substitui por CALLS do DB2. Assim o fonte fica adequado para ser submetido ao compilador.

• O delimitador que indica o inicio de um SQL é comum, à todas as linguagens.

• O final de um SQL é o delimitador “END-EXEC.” no COBOL, e “;” no PL/I.

• No FORTRAN o pré -compilador identifica o fim de uma instrução SQL quando nas linhas seguintes à do “EXEC SQL” não encontrar mais ocaracter de continuação “X” na coluna 6.

• No ASSEMBLER o caracter “X” na coluna 72 indica que a instruçãocontinua na linha seguinte.

Page 147: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 147 -

Variável Host

PARA FORNECER UM VALOR AO DB2

COBOL

MOVE ‘22000’ TO SAL.

22000 SAL

SQL

EXEC SQL... WHERE SALÁRIO = :SAL END-EXEC.

Page 148: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 148 -

Variável Host (cont.)

• Variáveis HOST são utilizadas para permuta de valores entre o SQL e a linguagem de programação.

• Uma das possíveis utilizações da variável HOST é a de fornecer um valor a uma instrução SQL, tornando-a genérica.

• A referência à variável HOST deve ser precedida pelo caracter “:”.

• No banco é obrigatório usar o DCLGEN para definir as variáveis HOST correspondentes as colunas das tabelas DB2.

• A variável HOST deve ser compatível com a coluna, quanto ao seu tipo de dado e tamanho.

• Variáveis HOST não podem ser utilizadas para referenciar nome detabelas ou nome de colunas.

Page 149: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 149 -

Outros Exemplos

PARA FORNECER UM VALOR AO DB2

EXEC SQL INSERT INTO EMPR(MATR, SOBRENOME)VALUES (:MATR, :SNOME) END-EXEC.

MATR SNOMEEXEC SQL

UPDATE EMPRSET SALARIO = SALARIO * :REAJWHERE CARGO = :CARGO

END-EXEC.

REAJCARGO

Page 150: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 150 -

Variável Host (Cont.)

• Variáveis HOST podem ser utilizadas também para o DB2 passar um valor para o programa.

• São necessárias numa instrução SELECT embutida.

• Uma variável HOST para cada coluna selecionada.

• O tipo de dado e o tamanho das variáveis e das colunas devem sercompatíveis.

• Variáveis adicionais chamadas variáveis indicadoras são necessár ias quando a coluna pode ser nula. Serão apresentadas mais tarde

Page 151: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 151 -

Variável Host (Cont.)

P A R A R E C E B E R U M VALOR DO DB2

EXEC SQLSELECT MATR, SOBRENOME

INTO :MATR, :SNOME

FROM EMPRWHERE DEPT = :DEP

END-EXEC.

P A R A R E C E B E R U M VALOR DO DB2

EXEC SQLSELECT MATR, SOBRENOME

INTO :MATR, :SNOME

FROM EMPRWHERE DEPT = :DEP

END-EXEC.

• SELECT .... INTO só pode ser usado quando a tabela resultado tem no máximo 1 linha

Page 152: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 152 -

Variável Host (Cont.)

E S T R U T U R A

EXEC SQL SNOMESELECT SOBRENOME, DEPTINTO :SNOME, :DEPTFROM EMPR DEPTWHERE MATR = :MATREND-EXEC.

MATR

equivale à:

EXEC SQLSELECT SOBRENOME, DEPTINTO :ESTRUTFROM EMPRWHERE MATR = :MATREND-EXEC.

MATR

SNOMEDEPT

Page 153: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 153 -

Variável Host (Cont.)

• Uma série contígua de variáveis HOST podem ser agrupadas num conjunto chamado de ESTRUTURA.

• A estrutura pode ser referenciada como uma unidade, conforme o exemplo.

• Devem ser selecionadas somente as colunas necessárias ao processo.

Page 154: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 154 -

Definição de Variável Host

DADOS NUMÉRICOSDADOS NUMÉRICOS

R E A L *8 N5 /DOUBLEPRECISION N5N5 DS D01 N5 COMP - 2.DCL N5 BIN

FLOAT(53)

FLOAT /FLOAT(53) /DOUBLE PRECIS ION

R E A L *4 N4 / REAL N4

N4 DS E01 N4 COMP -1.DCL N4 BINFLOAT(21)

R E A L *8 NEN3 DC

PL5’000.0001 N3 PIC S9(3)V9(2)

COMP -3.DCL N3 DEC

FIXED(5,2)DECIMAL (5,2) / DEC (5,2)

INTEGER*4 N2N2 DS F01 N2 PIC S9(9)

COMP. DCL N2 BIN

FIXED(31)INTEGER/ INT

INTEGER*2/N1N1 DS H01 NI PIC S9(4)COMP.

DCL N1 BIN FIXED(15)SMALLINT

FORTRANASSEMBLERCOBOLPL/ IDB2

R E A L *8 N5 /DOUBLEPRECISION N5N5 DS D01 N5 COMP - 2.DCL N5 BIN

FLOAT(53)

FLOAT /FLOAT(53) /DOUBLE PRECIS ION

R E A L *4 N4 / REAL N4

N4 DS E01 N4 COMP -1.DCL N4 BINFLOAT(21)

R E A L *8 NEN3 DC

PL5’000.0001 N3 PIC S9(3)V9(2)

COMP -3.DCL N3 DEC

FIXED(5,2)DECIMAL (5,2) / DEC (5,2)

INTEGER*4 N2N2 DS F01 N2 PIC S9(9)

COMP. DCL N2 BIN

FIXED(31)INTEGER/ INT

INTEGER*2/N1N1 DS H01 NI PIC S9(4)COMP.

DCL N1 BIN FIXED(15)SMALLINT

FORTRANASSEMBLERCOBOLPL/ IDB2

Page 155: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 155 -

Definição de Variável Host (cont.)

DB2 PL/ I COBOL ASSEMBLER FORTRAN

DCL STR2 CHAR (80) VAR;

VARCHAR(80)

CHAR(10) 01 STR1 PIC X(10)

01 STR249 STR2L

PIC S9(4) COMP.49 STR2C

PIC X(80).

DCL STR1 CHAR (1);

STR1 DS CL10

STR2 DS H,CL80

CHARACTER*10 S T R 1

CHARACTE*80 S T R 2

DB2 PL/ I COBOL ASSEMBLER FORTRAN

DCL STR2 CHAR (80) VAR;

VARCHAR(80)

CHAR(10) 01 STR1 PIC X(10)

01 STR249 STR2L

PIC S9(4) COMP.49 STR2C

PIC X(80).

DCL STR1 CHAR (1);

STR1 DS CL10

STR2 DS H,CL80

CHARACTER*10 S T R 1

CHARACTE*80 S T R 2

CARACTER STR INGCARACTER STR ING

Page 156: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 156 -

Definição de Variável Host (cont.)

DATA/HORÁRIO/TIMESTAMP

DOUBLE BYTE CHARACTER STR ING

DB2 PL/ I COBOL ASSEMBLER FORTRAN

DCL TM CHAR(8)TIME

DATE 01 DT PIC X(10)

01 TM PIC X(8)

DCL DT CHAR(10) DT DS CL10

TM DS CL8

CHARACTER*10 DT

CHARACTER*8 TM

TIMESTAMP DCL TS CHAR(26) 01 TS PIC X(26) CHARACTER*26 TSTS DS CL26

DB2 P L I COBOL

DCL DBC2 GRAPHIC(40) VARVARGRAPHIC (40)

GRAPHIC (5) 01 DBC1 PIC G(5) DISPLAY-1.

01 DBC249 DBC2L PIC S9(4) COMP.49 DBC2C PIC G(40) DISPLAY-1.

DCL DBC1 GRAPHIC(5)

Page 157: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 157 -

Definição de Variável Host (cont.)

• Dados DATE/TIME são sempre convertidos para representação em

caracteres, quando são assinalados para as variáveis HOST.

• DATE(ISO): aaaa-mm-dd (10 caracteres)

• TIME(ISO): hh.mm.ss (8 caracteres)

• TIMESTAMP: aaaa-mm-dd-hh.mm.ss.nnnnnn (26 caracteres)

Page 158: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 158 -

Commit/Rollback

• COMMIT

• INDICA FIM DE UMA LUW• ATUALIZAÇÃO• CURSOR FECHADO (EXCETO COM OPÇÃO WITH HOLD)

• ROLLBACK

• LUW ABORTADA• ATUALIZAÇÃO DESFEITA A PARTIR DO ÚLTIMO COMMIT• CURSOR FECHADO (EXCETO COM OPÇÃO WITH HOLD)

**** No Banco todo programa BATCH que atualiza tabelas DB2 deve ter COMMIT e lógica de RESTART. Consultar normas do KIT ANALISTA.

Page 159: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 159 -

Commit/Rollback (cont.)

• A instrução COMMIT:

• valida todas as atualizações feitas até então• atualizações são registradas no LOG• pode liberar as páginas e/ou tablespaces presos (lock) • indica que uma LUW chegou ao seu final com sucesso• todos os cursores abertos são fechados (SEM OPÇÃO WITH HOLD)

• A instrução ROLLBACK:

• LUW corrente será abandonada• todas as atualizações feitas a partir do último COMMIT são

desfeitos• pode liberar as páginas e/ou tablespaces presos (lock) • todos os cursores são fechados (SEM OPÇÃO WITH HOLD)

Page 160: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 160 -

Luw

UPDATECONTA

UPDATEPOUPANÇA

COMMIT

500 500 400 500 400 600 400 600

CONTA POUPANÇA CONTA POUPANÇA

100 100

NOVO PONTO DECONSISTÊNCIA

LUW

500 500

ROLLBACK

LUW ABORTADA

t

t

PONTO DE CONSISTÊNCIA

Page 161: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 161 -

Luw (cont.)

• Uma Logical Unit of Work (LUW) também é conhecida com UNIT OF WORK ou UNIT OF RECOVERY.

• Alguns processamentos podem ser divididos logicamente em pontos nas quais os dados estão “consistentes”.

• No nosso exemplo os dados estão consistentes quando a transferência de fundos está terminada. Se o processamento fosse interrompido antes do fundo ser adicionando na POUPANÇA, teríamos uma situação de inconsistência dos dados.

• Assim, é inaceitável que um processamento seja interrompido durante uma LUW.

• Para o DB2, o final de uma LUW é chamada de commit point. Esta situação é estabelecida:

• ao término normal do programa• com execução de um comando via programa (COMMIT, Check point

etc., dependendo do ambiente)• Uma LUW incompleta deve ser desfeita até o último COMMIT point. Este

processamento é conhecido com ROLLBACK. O ROLLBACK é disparado:• ao término anormal de programa• com execução de um comando via programa

Page 162: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 162 -

Commit/Rollback

COMMIT

TSO/BATCH IMS CICS call ROLL comando ROLLBACK

ROLLBACK call ROLB

Automaticamente ao término ANORMAL DO PROGRAMA

ROLLBACK

TSO/BATCH IMS CICScall CHKP comando SYNCPOINT

COMMIT call sync GU IOPCB

Automaticamente ao término NORMAL DO PROGRAMA

Page 163: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 163 -

SQLCA

• NECESSÁRIO PARA O PROGRAMA

• FORNECE INFORMAÇÕES SOBRE O SQL EXECUTADO

• EMBUTIDO NO PROGRAMA VIA:

EXEC SQL INCLUDE SQLCA END -EXEC .

Page 164: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 164 -

SQLCA (cont.)

• O DB2 passa as informações referentes à execução de uma instrução SQL num bloco de controle chamado SQL COMMUNICATION AREA (SQLCA).

• O SQLCA é rotulado como “SQLCA” e é necessário ao programa.

• O SQLCA deve ser verificado pelo programa para determinação do sucesso ou não da última execução de uma instrução SQL.

• A sua codificação pode ser incorporada no programa peloprecompilador se incluirmos a instrução “INCLUDE SQLCA”.

Page 165: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 165 -

SQLCA (cont.)

CONDIÇÃO SQLCODE

ERRO GRAVE negativo

ADVERTÊNCIA positivodiferente de 100

NÃO ENCONTRADO + 100

OU FIM DO CURSOR

SUCESSO 0

VERIFICARSQLWARN0VERIFICARSQLWARN0

Page 166: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 166 -

Formato SQLCA

01 SQLCA.05 SQLCAID PIC X(8).05 SQLCABC PIC S9(9) COMP-4.05 SQLCODE PIC S9(9) COMP-4.05 SQLERRM.

49 SQLERRML PIC S9(4) COMP-4.49 SQLERRMC PIC X(70).

05 SQLERRP PIC X(8).05 SQLERRD OCCURS 6 TIMES

PIC S9(9) COMP-4.05 SQLWARN.

10 SQLWARN0 PIC X.10 SQLWARN1 PIC X.10 SQLWARN2 PIC X.10 SQLWARN3 PIC X.10 SQLWARN4 PIC X.10 SQLWARN5 PIC X.10 SQLWARN6 PIC X.10 SQLWARN7 PIC X.

05 SQLEXT.10 SQLWARN8 PIC X.10 SQLWARN9 PIC X.10 SQLWARNA PIC X.10 SQLSTATE PIC X(5).

Page 167: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 167 -

SQL Warning

Se SQLWARN0 = ‘ ‘ : SQLWARN1 ~ 6 estão Brancos. SE SQLWARN0 = ‘W’ : algum SQLWARN.. setado para ‘W’

SQLWARN1 : string assinalada á variável HOST foi truncada

SQLWARN2: nulos ignorados no cálculo de uma função de coluna

SQLWARN3: número de colunas maior que o de variáveis HOST

SQLWARN4: UPDATE ou DELETE “PREPARED” não apresenta cláusula WHERE.

SQLWARN5: instrução SQL/DS inválida no DB2

SQLWARN6: valor de data ou TIMESTAMP corrigidas de um valor inválido resultante de uma operação aritmética.

Page 168: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 168 -

SQL Warning (cont.)

• O campo SQLWARN0 é usado para alguns casos de advertência.

Devem ser examinados em casos de SQLCODE positivos ou zero.

• O terceiro campo do vetor de inteiros SQLERRD informa a

quantidade de linhas afetadas por uma requisição de alteração de

dados (UPDATE, INSERT, DELETE).

• Exceção: Deleção em massa de uma tabela faz com que

SQLERRD(3) =-1

Page 169: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 169 -

Auxílio à Codificação

• INSTRUÇÃO WHENEVERmanipulação de exceções

• DCLGENgerar declaração de variáveis HOST

• INSTRUÇÃO INCLUDEembutir estrutura de SQLCA/var.HOST no programa

• DSNTIAR/DSNTIRrotina de formatações de mensagens de erro.

Page 170: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 170 -

Instrução Whenever

EXEC SQL WHENEVER CONDIÇÃO AÇÃO END-EXEC.

CONDIÇÃO

SQLERROR : SQLCODE negativoSQLWARNING : SQLCODE positivo diferente de 100

ou SQLWARN0 = ‘W’NOT FOUND : SQLCODE = +100

AÇÃO

GO TO :XCONTINUE

Page 171: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 171 -

Instrução Whenever (cont.)

• Esta instrução testa o SQLCODE na SQLCA após cada execução de uma instrução SQL e para uma determinada condição de execução, toma umaação determinada.

• A instrução WHENEVER é substituída por códigos “IF... THEN... ELSE” pelo pré-compilador.

• A instrução WHENEVER não é uma rotina de inicialização como o ONCONDITION do PL/I. O pré-compilador insere a condição equivalente logo após cada instrução SQL do programa fonte.

• Ex.: EXEC SQL WHENEVER SQLERROR GO TO :ROTULOZ;Com esta instrução, um SQLCODE negativo faz o programa saltar para a rotina rotulada por ROTULOZ.

• As três condições de exceção podem estar em efeito ao mesmo tempo.

• O efeito do WHENEVER é válido para qualquer instrução SQL que vem codificado depois da mesma. Seu efeito é cancelado por um “WHENEVER... CONTINUE” ou substituído por outro “WHENEVER... GO TO...”.

• Só no cobol.

Page 172: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 172 -

DCLGEN

TABELA EMPRMATR CHAR (6)NOME VARCHAR(12)

ME MB 301 DCEMPR.10 MATR PIC X(6).10 NOME.

49 NOME -LEN PIC S9(4) USAGE COMP.49 NOME -TEXT PIC X(12).

DCLGEN

CATÁLOGO

BIBLIOTECA INCLUDE

Page 173: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 173 -

DCLGEN (cont.)

• O DCLGEN é um programa que gera uma codificação de declaração devariáveis HOST correspondentes às colunas de uma dada tabela.

• Esta codificação é feita numa das seguintes linguagens: COBOL, COBOL II, PL/I e C.A escolha da linguagem é feita na opção defaults do painel DB2I.

• O DCLGEN gera também uma instrução SQL “DECLARE TABLE” para ser utilizado pelo pré-compilador.

• Tanto a instrução DECLARE TABLE como a codificação das variáveisHOST são armazenadas num único membro de uma biblioteca.

• A função de manter uma biblioteca de INCLUDE com a saída do DCLGEN normalmente é exercida pelo suporte.

Page 174: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 174 -

Instrução Include

MEMB3

EXEC SQLINCLUDE MEMB3

END-EXEC.. 01 DCLEMPR.. 10....

EXEC SQLINCLUDE SQLCA 01 SQLCA

END-EXEC. 05...

Page 175: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 175 -

PREPARAÇÃO DE PROGRAMA COM SQL

Page 176: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 176 -

Preparação de Programa com SQL

PREPARAÇÃO DE PROGRAMA COM SQLPREPARAÇÃO DE PROGRAMA COM SQL

Código fonte com SQL

Biblioteca de Include

PRECOMPILE

Fonte Modificado DBRM (Biblioteca)

COMPILE

LINK EDIT

Módulo Objeto

Load Módulo(Language Interface)

BINDDefinição Table/Column

SYSPACKAGE

Autorizações

Package Plan

EXECUTE

Diretório do DB2 Diretório do DB2

Catálogo do DB2

Page 177: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 177 -

Preparação de Programa com SQL (cont.)

• A preparação de um Programa é o nome que damos ao processo que torna um programa fonte em um módulo de carga executável.

• Em linhas gerais a preparação de um programa é constituído das seguintes fases:

• Pré-compilação

• Compilação e Linkedição

• BIND

Page 178: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 178 -

Precompilador

• O Pré-compilador roda independente do DB2 - não acessa o catálogo.

• Verifica a SINTAXE dos comandos SQL

• A partir do fonte gera dois data sets “selados” com um timestamp:

• DBRM (Data Base Request Module): contém todas as instruções SQL embutidas no fonte.

• Fonte Modificado: O novo fonte o pré- compilador:

• coloca as instruções EXEC SQL como comentários e transforma-as em CALL’s para o DB2.

• transforma a instrução WHENEVER em lógica “IF...THEN...ELSE...”

• Inclui a declaração de tabelas e a declaração de variáveis host(output do DCLGEN). A instrução DECLARE TABLE é utilizada para verificação do nome dos objetos, nome das colunas e a correspondência entre colunas e variáveis HOST

• Inclui a SQLCA

• Gera um relatório de execução com eventuais mensagens de erro.

Page 179: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 179 -

Compilador / Linkage Editor / Bind

• O compilador gera o módulo objeto a partir do fonte modificado pelo pré-compilador. O timestamp é copiado do fonte.

• O linkage editor gera o módulo de carga a partir do módulo objeto e do módulo de interface de linguagem do DB2. O timestamporiginal é copiado do módulo.

• O processador de BIND gera o package a partir do DBRM.

• O timestamp é copiado do DBRM.

• Um package contém a estratégia de acesso aos dados DB2 onde são descritos informações como :

• índices utilizados• estratégia de locking• estratégia de resolução de JOIN, etc.

• A fase de compilação/linkedição e a fase de BIND são executadas separadamente e podem ser executadas em qualquer ordem.

Page 180: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 180 -

Visão Geral “Bind”

VISÃO GERAL “BIND”VISÃO GERAL “BIND”

D B R Mno PDS

Catálogodo DB2BIND

VALIDAÇÃOTable/col Table/colReferencias descrições

AUTORIZAÇÃOTipo de usuáriossoliticação autorizadosESTRATÉGIA DE ACESSO

Tipo de característicassolicitação físicas

D B R Mna

SYS IBM.SYSPACKSTMTPackage

Page 181: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 181 -

Visão Geral “Bind” (cont.)

• O propósito do BIND é a geração de um package. As entradas

necessárias são o DBRM e o catálogo.

• Os procedimentos executados são:

• checagem da consistência da instrução SQL com os objetos sendo

manipulados (nome, formato das colunas, etc.)

• checagem da autorização necessária para a execução das

instruções SQL.

• determinação da estratégia de acesso aos objetos de manipulação

pelo otimizador do DB2.

• o package é carregado no diretório e uma cópia do DBRM é

carregado no catálogo.

Page 182: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 182 -

Visão Geral “Bind” (cont.)

• O BIND ADD é utilizado para criar um novo package.

• O BIND REPLACE é utilizado quando a própria instrução foi alterada

e queremos refazer o package existente.

• O REBIND é utilizado quando o SQL está inalterado mas ocorreu

alguma modificação no ambiente tal como criação/eliminação de

índice, atualização das estatísticas no catálogo que precisam ser

refletidos no package existente.

• O otimizador do DB2 pesa fatores com CPU e I/O para optar por uma

estratégia de acesso.

Page 183: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 183 -

PACKAGE

Os packages são armazenados em Collections

DBRM

BIND PACKAGE (online )MEMBER ( dbrma)

BIND PACKAGE (online)MEMBER (dbrma)

Nome do Package =Collection _id.Package_idNome do Package =Collection_id.Package _id

BIND PACKAGE (batch)MEMBER (dbrma)

BIND PACKAGE (batch)MEMBER ( dbrma)

dbrma

online batch

dbrmadbrma

Page 184: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 184 -

COLLECTION

Uma COLLECTION é um conjunto de Packages

A collection é implicitamente criada no primeiro bind packagese referenciando a ela

Exemplo:

pkg1

online batch

pkg3

BIND PACKAGE ( online) MEMBER (pkg1)BIND PACKAGE (batch) MEMBER (pkg3)BIND PACKAGE (online) MEMBER (pkg1)BIND PACKAGE (batch) MEMBER (pkg3)

Page 185: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 185 -

TOKEN DE CONSISTÊNCIA - Prep. do Programa

Pre-compilador

Compilador/ Link-edit

prog2

prog2prog3 prog1

prog1prog3

DiretórioLoad Módulo

BIND PACKAGE

dbrm2dbrm1dbrm3

dbrm3 dbrm2dbrm1

: Timestamp da precompilação

Page 186: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 186 -

Plano - ligação entre o package e o load modulo

dbrm1dbrm1dbrm3dbrm1

dbrm2

Diretório

collycollx

collz

collx.dbrm1, collz.*collx.dbrm1, collz.*

RUN PROGRAM ( Imoda)PLAN ( plana)

BIND PLAN (plana)PKL IST ( collx .dbrm1, collz.*)

plana

.CALL DSNHLI (dbrm1, ,1)..CALL DSNHLI (dbrm1, ,2)..

CALL DSNHLI (dbrm3, ,1).

lmoda

Page 187: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 187 -

PLANOS E PACKAGES

• Um package somente pode ser localizado e executado via um PLANO

• Um PLANO contém a PACKAGE LIST, um a lista de ponteiros para ospackages

• O nome do DBRM e o timestamp fornecido no call é usado para localizar o package correto através da package l ist

Page 188: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 188 -

ERRO DE TIMESTAMP

dbrm1dbrm1

colly collx

colly .*, collx.*

.CALL DSNHLI (dbrm1, ,1).

-80551002

plana

RUN PROGRAM (Imoda)PLAN (plana)

Page 189: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 189 -

BIND - opção QUALIFIER

.SELECT...FROM TAB1.

.SELECT...FROM TAB1.

BIND PACKAGEQUAL (PROD)

BIND PACKAGEQUAL (PROD)

BIND PACKAGEBIND PACKAGEBIND PACKAGE

QUAL (TEST)BIND PACKAGE

QUAL (TEST)

TEST.TAB1 binder.TAB1 PROD.TAB1

Page 190: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 190 -

Cursor

215

P R O C E S S A MENTO DE MÚLTIPLAS LINHAS

O P E NMATR SOBRENOME

030 SILVA050 P A R K E R

C L A R K MATR SNOMEFETCH

MATR SOBRENOME030 SILVA050 P A R K E R 030 SILVA215 C L A R K

MATR SNOME

FETCHMATR SOBRENOME

030 SILVA050 P A R K E R 050 P A R K E R215 CLARK MATR SNOME

SELECT MATR,SOBRENOMEFROM EMPRWHERE DEPT=‘D01’

Page 191: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 191 -

Cursor (cont.)

• Se o resultado do SELECT pode ter mais de uma linhas, o programa

deve trabalhar com um CURSOR.

• Quando o programa executa o OPEN de um cursor, o DB2 executa o

SELECT e a tabela resultante fica presa, esperando pelo

processamento.

• O programa deve prover variáveis HOST para cada coluna do

CURSOR.

• O programa executa a instrução SQL “FETCH” para movimentar o

cursor para a “próxima linha”. As variáveis HOST conterão os valores

da linha sendo apontada.

Page 192: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 192 -

Select com Fetch

• DEFINIÇÃO do CURSOR

EXEC SQLDECLARE K9 CURSOR FORSELECT MATR, SOBRENOMEFROM EMPR WHERE DEPT = :DEPT

END-EXEC.

• OPEN DO CURSOR

EXEC SQL OPEN K9 END-EXEC.

• FETCH das linhas resultantes

EXEC SQL FETCH K9 INTO :MATR, :SNOME

END-EXEC.

• CLOSE CURSOR

EXEC SQL CLOSE K9 END-EXEC.

Page 193: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 193 -

Procure Definir

DECLARE CURSOR: No COBOL antes da PROCEDURENo EASY antes do JOB INPUTOu verifique os padrões da sua instalação.

• A instrução DECLARE CURSOR define a seleção dos dados que comporão a tabela resultante. Um nome deve ser atribuído a esta tabela para futuras referências dentro do programa

• A instrução DECLARE CURSOR não retorna nenhum valor ao programa.Isto é feito pela instrução FETCH.

• No nosso exemplo foi declarado o cursor K9.

• A instrução OPEN executa a seleção que está limitada pelo valores da variável HOST DEPT. O cursor não está apontando para nenhuma linha.

• O FETCH aponta para a primeira linha da tabela resultante, O programa lê o valor das colunas através das variáveis MATR e SNOME.

Page 194: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 194 -

Procure Definir (cont.)

• Um programa típico emite FETCHS sucessivamente até receber o SQLCODE +100 na SQLCA, que indica fim da tabela resultante.

• O CURSOR deve ser fechado com CLOSE quando não é mais necessário. O final do programa também faz o DB2 fechar os cursores abertos.

• Um programa pode ter vários cursores abertos ao mesmo tempo.Porém, procure sempre manter o menor número de cursores abertos simultaneamente, para otimizar performance.

• Para programas que irão emitir COMMIT e necessitam reposicionar o cursor, defina o cursor com a cláusula WITH HOLD.EXEMPLO:

EXEC SQL DECLARE K9 CURSOR WITH HOLD FOR...

Page 195: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 195 -

EXEC SQLDECLARE CE CURSOR FORSELECT ... FROM EMPR...

END-EXEC.

EXEC SQL OPEN CE END-EXEC.

EXEC SQL FETCH CE INTO...END-EXEC...

EXEC SQL DELETE FROM EMPRWHERE CURRENT OF CE END-EXEC

.

.

.

.EXEC SQL CLOSE CE END-EXEC

Delete Via Cursor

Page 196: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 196 -

Delete Via Cursor (cont.)

• Um programa tem a opção de eliminar algumas das linhas apontadas por um CURSOR.

• A instrução DELETE com a claúsula “WHERE CURRENT OF CURSOR” faz com que a linha apontada pela última instrução FETCH seja eliminada.

• Este formato aplica-se para o caso de DELETE de linhas apontadas por um CURSOR. Se não existe a necessidade de exame do conteúdo das linhas, podemos fazer o DELETE de uma ou múltiplas linhas sem a utilização de um CURSOR

• Um cursor não pode ser usado para DELETE, se na sua declaração estiverem presente:

• ORDER BY,• GROUP BY,• DISTINCT,• UNION,• função ou• Join.

Page 197: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 197 -

Update Via Cursor

EXEC SQLDECLARE CX CURSOR FORSELECT ... MATR, SOBRENOMEFROM EMPRWHERE DEPT = : DPTFOR UPDATE OF SOBRENOME

END-EXEC.

EXEC SQL OPEN CE END-EXEC..

EXEC SQL FETCH CX INTO :MATR,:SNOME END..

EXEC SQL UPDATE EMPRSET SOBRENOME = :NOVOSN

WHERE CURRENT OF CX END-EXEC..

EXEC SQL CLOSE CX END-EXEC

Page 198: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 198 -

Update Via Cursor (cont.)

• Um programa pode fazer a atualização de algumas linhas apontadas por um CURSOR.

• A atualização deve ser feita para a linha que está sendo apontada pelo CURSOR especificado na clausula “WHERE CURRENT OF CURSOR”.

• Somente as colunas especificadas na cláusula “FOR UPDATE OF lista de colunas” da instrução DECLARE podem ser atualizadas.

• Um programa pode atualizar uma ou múltiplas linhas de uma tabela sem utilizar um CURSOR.

• Uma instrução DECLARE não pode conter cláusula “FOR UPDATE OF”, se a instrução SELECT associada contiver:

• ORDER BY,• GROUP BY,• DISTINCT,• UNION,• função ou• Join.

Page 199: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 199 -

Manipulação de Cursor

POSICIONAMENTOOPEN

FETCH ... FETCH ... FETCH...

CLOSE

REUTILIZAÇÃO do CURSORO P E N

Page 200: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 200 -

Manipulação de Cursor (cont.)

• OPEN posiciona o cursor “antes” da primeira linha da tabela resultante.

• FETCH avança o cursor uma linha para frente.

• Antes da Versão 7 do DB2 não existe meio de fazermos um FETCH para trás.

• CLOSE destrói a posição do cursor

• Um cursor pode ser reutilizado e a sua posição é restaurada para o “topo” da tabela resultante.

• Um CLOSE não implica no fim de uma logical unitof work (LUW) e portanto não gera um COMMIT.

• Uma instrução COMMIT fecha todos os cursores sem opção with hold e valida todas as atualizações efetuadas até então.

Page 201: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 201 -

Variável Indicadora

colunaCARGO

EXEC SQL

SELECT CARGO DEPT, FONE, NOMEINTO :CC:CCI, :DPT, :FON:NFON, :NOMFROM EMPRWHERE MATR = :ID

END-EXEC.

Var.HOST:CC

Var.IND:CC I

S E L E C T /FETCH

“ANALISTA”NULO

“ANALISTA”inalterado

0-1

UPDATE/INSERT

“GERENTE”NULO

“GERENTE”ignorado

0-1

Page 202: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 202 -

Variável Indicadora (cont.)

• Se uma coluna selecionada permite valor nulo, o DB2 requer uma variável indicadora para registrar uma eventual nulidade.

• Uma variável indicadora é uma halfword (SMALLINT).

• Uma variável indicadora deve ser especificada contiguamente à variável HOST correspondente, conforme o exemplo.

• As variáveis HOST que não trabalham com nulo não requerem uma variável indicadora. Vide a coluna DEPT do exemplo.

• Para um SELECT OU FETCH, se a coluna apresentar valor nulo, DB2 atribui - 1 à variável indicadora e mantém inalterada a variável HOST, que deve ser ignorada pelo programa.

• Se um programa envolvendo UPDATE ou INSERT atribuir - 1 à variável indicadora, o DB2 assumirá valor nulo para a coluna correspondente.

Page 203: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 203 -

Vetor de Var. Indicadoras

EXEC SQL

SELECT CARGO, DEPT, FONE, NOMEINTO :EST:VETORFROM EMPRWHERE MATR = :ID

END-EXEC.

ID E S T VETOR

01 EST. 01 VETOR.10 CC PIC... 10 ARRAY PIC S9(4) COMP10 DPT PIC... OCCURS 3 TIMES 10 FON PIC...10 NOM PIC...

Page 204: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 204 -

Vetor de Var. Indicadoras (cont.)

• Se as variáveis HOST estão arranjadas numa estrutura e pelo menos um de seus componentes trabalha com nulo, o programa deve apresentar um vetor de variáveis indicadoras.

• O Vetor deve conter uma variável indicadora para cada componente da estrutura, inclusive as que não trabalham com nulo, até a últimavariável HOST que deve trabalhar com nulo.

• No nosso exemplo a 4ª coluna não trabalha com nulo e o nosso vetor não precisa de 4 indicadoras.

• A correspondência entre a estrutura e o vetor é posicional.

• O vetor é uma múltipla ocorrência de variáveis halfword (SMALLINT).

• A utilização do vetor de variáveis indicadoras é somente para o COBOL ou PL/I.

Page 205: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 205 -

Outros usos da Variável Indicadora

• As variáveis indicadoras podem ser usadas para indicar outras situações.

• - 2 válido para SELECT externo (numa SUBQUERY por ex.) ou FETCH. Indica que a coluna tem resultado nulo e a variável HOST permanece inalterada. O teste de SQLCODE dá novas informações:

• +304 indica erro de conversão. Por exemplo uma variável HOST não conseguiu comportar um valor maior que 32K,

• + 802 indica erro aritmético resultante de divisão por zero ou overflow.

• “n” indica que uma variável HOST é pequena demais para conter umstring de “N” caracteres que teve de ser truncado. O SQLWARN1 ésetado para ‘W’.

• Erros de conversão ou de aritmética resultavam -304 ou -802 na ausência da variável indicadora.

Page 206: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 206 -

Erros de Aritmética e Conversão - Exemplo

01 MV1 PIC S9(9) COMP VALUE 0.01 MV2 PIC S9(9) COMP.01 MV3 PIC S9(9) COMP.01 I-VARIABLES.

05 IV1 PIC S9(4) COMP.05 IV2 PIC S9(4) COMP.05 IV3 PIC S9(4) COMP.

EXEC SQLSELECT SMI1, SMI1*INT1, SMI1/SMI2INTO :MV1:IV1, :MV2:IV2, :MV3:IV3 FROM TABLEA

END-EXEC.

04

3456782111111111

24

SMI2INT1SMI104

3456782111111111

24

SMI2INT1SMI1

1. Primeira linha:

2. Segunda linha:

MV1 = 1 IV1 = 0MV2 = 691356 IV2 = 0MV3 = 0 IV3 = -2SQL CODE = +802

MV1 = 4 IV1 = 0MV2 = 691356 IV2 = -2MV3 = 1 IV3 = 0SQL CODE = +304

Page 207: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 207 -

Uso da Variável Indicadora - Resumo

var.IND INTERPRETAÇÃO

0 var. HOST contém valor não nulo

-1 coluna com valor nulovar. HOST inalterada

-2 resultado nulo devido a uma erroaritmético ou de conversão

n (>0) s tring de “n”caracteres truncadono assinalamento à variável HOST

Page 208: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 208 -

Estratégia de Acesso

SELECT * FROM EMPRWHERE SEXO = ‘F’

AND (CARGO = ‘ANALISTA’ OR SALARIO > 1000) AND DEPT IN (‘E11’,’D14’)

• ÍNDICES DISPONÍVEIS?

• QUANTIDADE DE PÁGINAS LIDAS SE TABLESPACE FOR VARRIDO? E SE ÍNDICES FOREM UTILIZADOS?

• QUAL A MELHOR ORDEM DE EXECUÇÃO DOS TESTES?

• EXPLAIN. É usado para verificar qual estratégia foi escolhida pelo DB2

Page 209: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 209 -

Estratégia de Acesso (cont.)

• A estratégia de acesso de uma instrução SQL é determinada pelo

otimizador do DB2.

• O otimizador procura a melhor opção de acesso para minimizar o

consumo de recursos de I/O e CPU.

• O otimizador se baseia nas informações estatísticas contidas no

catálogo. Tais informações são atualizadas pelo utilitário RUNSTATS.

Page 210: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 210 -

Execução do Programa

CICS, IMS, TSO DB2

C A L L

RELATÓRIO VSAM TABELASDB2

MÓDULODECARGA

PLANO

PACKAGE

Page 211: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 211 -

Execução do Programa (cont.)

• O programa é executado no address space do usuário, enquanto que o package é executado no address space do DB2.

• O acesso às tabelas são feitos através de CALL para o DB2.

• Para impedir que eventualmente um programa venha a utilizar um package que não lhe pertence, o DB2 checa se os timestamps do módulo de carga e do package são iguais. O programa não é executado se não forem coincidentes.

SQLCODE= - 805 (PACKAGE)

• Antigamente não existiam packages , e um plano era composto de um conjunto de DBRM’s. Para estes planos, quando existe um problema detimestamp diferente é emitido

SQLCODE= - 818 (PLANO com DBRM)

Page 212: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 212 -

Considerações Sobre Programação

Page 213: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 213 -

Recomendações DML

• Use DCLGEN para gerar variáveis HOST compatíveis com

colunas. Evite assim conversões numéricas.

- SELECT A INTO :B

- WHERE A = :B

Page 214: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 214 -

Recomendações DML (cont.)

• SELECIONE SOMENTE AS COLUNAS DESEJADAS

colunas adicionais = CPU ADICIONAL

• É PROIBIDO O USO DO SELECT * NO BANCO

- adição de colunas poderá provocar erros

- acesso ao catálogo DB2

Page 215: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 215 -

Recomendações DML (cont.)

• EVITE o subquery correlacionado.

SELECT MATR, SOBRENOMEFROM EMPR E, PROJETO PWHERE E.DEPT = P.DEPTAND E.MATR = P.RESP

é mais eficiente que

SELECT MATR,SOBRENOMEFROM EMPR EWHERE DEPT = (SELECT DEPT

FROM PROJETOWHERE RESP = E.MATR)

Page 216: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 216 -

Recomendações DML (cont.)

• Use o ORBER BY somente quando necessário

• CPU ADICIONAL

• I/O ADICIONAL NO DATABASE TEMPORÁRIO

• CONSIDERE SORT EXTERNO NO LUGAR DE ORDER BY

• PARA TABELAS COM GRANDE QUANTIDADE DE LINHAS

Page 217: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 217 -

Uso do Índice

COLUNA INDEXADA INDEX SORTCANDIDATO CANDIDATO

IN SIML IKE NOTA 1BETWEEN SIM>,>=,<,<=,¬>,¬<,= SIM¬=,<> NÃONOT NOTA 2OR NOTA 3O R D E R B Y SIM SIMGROUP BY SIM SIMDISTINCT SIM SIMCOMPARED TO:LONGER L I TERAL NÃOARITIMETIC EXP. NÃODIFF. DATA TYPE NÃOUSED FOR JOIN SIM SIM

NOTA 1: Sim, exceto quando a variável – host contiver ‘%’ ou ‘-‘ no início.NOTA 2: Sim, quando pode ser substituido por operador que usa o índiceNOTA 3: Sim se possível converter em IN.

USO DO ÍNDICEUSO DO ÍNDICE

Page 218: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 218 -

Expressões Aritméticas

EXEC SQLSELECT LASTNAME, SALARYFROM TEMPLWHERE SALARY <= :SAL + 1000

END-EXEC

SAL = SAL + 1000EXEC SQL

SELECT LASTNAME, SALARYFROM TEMPLWHERE SALARY <=: SAL

END-EXEC

EXPRESSÕES AR I TMÉTICASEXPRESSÕES ARITMÉTICAS

• MATCHING INDEX EM SALARY NÃO UTILIZADO

• MATCHING INDEX EM SALARY CONSIDERADO

Page 219: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 219 -

Condições Not

CONDIÇÕES NOTCONDIÇÕES NOT

WHERE DEPTNO ¬= ‘E01’WHERE DEPTNO NOT LIKE ‘E%’WHERE DEPTNO NOT IN (‘E11’,’D11’)WHERE DEPTNO NOT BETWEEN ‘A11’ AND ‘B28’WHERE DEPTNO IS NOT NULL

WHERE DEPTNO ¬> ‘D17’WHERE NOT DEPTNO < ‘D28’

Evitar a utilização do comando NOT

• MATCHING INDEX EM DEPTNO CONSIDERADO

• MATCHING INDEX EM DEPTNO NÃO UTILIZADO

Page 220: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 220 -

Uso do “Like”

USO DO “LIKE”USO DO “LIKE”

WHERE LASTNAME LIKE ‘%SON’WHERE LASTNAME LIKE ‘_SON’WHERE SUBSTR(LASTNAME ,3,3) = ‘SON’

WHERE LASTNAME LIKE ‘B_S%’

Evitar a utilização do comando LIKE

• MATCHING INDEX EM LASTNAME NÃO UTILIZADO

• MATCHING INDEX EM LASTNAME CONSIDERADO

Page 221: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 221 -

Subqueries

SUBQUERIESSUBQUERIES

WHERE DEPTNO =(SELECT WORKDEPT FROM EMPLWHERE EMPNO = ‘123456’)

WHERE DEPTNO= ANY (SELECT WORKDEPTFROM EMPL WHERE LASTNAME=‘SMITH’)

SELECT LASTNAME, FIRSTNAME FROM EMPL MYWHERE SALARY> (SELECT AVG(SALARY)

FROM EMPLWHERE WORKDEPT = MY.WORKDEPT)

• MATCHING INDEX EM DEPTNO CONSIDERADO:

• MATCHING INDEX EM DEPTNO NÃO UTILIZADO

- SUBQUERY NÃO-CORRELATA- VALOR ÚNICO DA SUBQUERY

- L ISTA DE VALORES DA SUBQUERY

Page 222: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 222 -

Explain

EXPLAINEXPLAIN

SELECT MATR, SOBRENOME FROM EMPRWHERE ......AND......AND......SELECT MATR, SOBRENOME FROM EMPRWHERE ......AND......AND......

Instrução ou opção do BIND

PLAN-T A B L E

• INFORMA A ESTRATÉGIA DE EXECUÇÃO DE UMA INSTRUÇÃO SQL

− ESCOLHA DO CAMINHO (ÍNDICE X TABLESPACE SCAN)− ÍNDICES UTILIZADOS− SORTS REQUERIDOS− SEQUÊNCIA DE PROCESSAMENTO DAS SUBQUERIES− ESTRATÉGIA DE LOCKING

Page 223: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 223 -

Explain (cont.)

• FERRAMENTA DO DBA PARA DETERMINAR

• NECESSIDADE DE ÍNDICE

• PROBLEMA DE LOCKING

• FERRAMENTA DO PROGRAMADOR

• TESTAR ALTERNATIVAS DE ESTRATÉGIAS

• VERIFICAR EFICIÊNCIA DA INSTRUÇÃO SQL

Page 224: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 224 -

Explain (cont.)

PLAN - T A B L E

EXPLAINEXPLAIN

EXPLAINEXPLAINComandoSQL

• EXPLAIN ALL

SET QUERY = nFOR sql-statement

Page 225: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 225 -

Plan_table

Page 226: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 226 -

Plan_table (cont.)

EDIT – DB2. DISCOVER.EXPLAIN(GOLD) -01.03 ----------COMMAND===> ; ; ;****** ************** TOP OF DATA ****************000100 EXPLAIN ALL SET QUERYNO = 1 FOR000200 SELECT LASTNAME , FIRSTNAME , SALARY000300 FROM EMP000400 WHERE EMPNO = ‘ 000280 ’ ;000500 - - -000600 SELECT *000700 FROM PLAN_TABLE000800 WHERE QUERYNO = 1 ;****** ************* BOTTOM OF DATA **************

PF3

Page 227: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 227 -

Plan_table (cont.)

PLAN_TABLEPLAN_TABLE

• ACCESSTYPE :

− R = TABLESPACE SCAN (TABLE SCAN IF SEGMENTED TS)− I = INDEX SCAN− M = One fetch INDEX access for MIN or MAX function− N = INDEX access for IN list− M =Multiple INDEX SCAN. Followed by MX and MI or MU− MX =One of multiple INDEX SCANs− MI =Intersection of multiple indexes− MU = Union of multiple indexes

I F ACCESSTYPE = I , M , N , MX , then:• ACCESSNAME: Name of Index• MATCHCOLS: # of matching cols• INDEXONLY: Y if no data access

Page 228: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 228 -

Tópicos Adicionais

Parte 3

Page 229: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 229 -

LOCKING

Page 230: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 230 -

Locking

• O propósito do mecanismo do LOCKING é indicar se um dado está sendo utilizado ou não, para permitir ao DB2 organizar um situaç ão de acesso múltiplo aos dados.

• Protege contra

• acesso a um dado com alteração não validada.• atualização de um dado que está sendo utilizado (para leitura

por exemplo).

• Um LOCK tem três características:

• Granularidade• Modo• Duração

Page 231: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 231 -

Granularidade - Locksize Tablespace

WAITING

WAITING

WAITING

S E L E C T

S E L E C TUPDATE

UPDATE

LOCKS IZE TABLESPACELOCKS IZE TABLESPACE

Page 232: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 232 -

Granularidade - Locksize Table

S E L E C T

S E L E C TUPDATE

UPDATE

WAITING WAITING

LOCKS IZE TABLELOCKS IZE TABLE

Page 233: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 233 -

Granularidade - Locksize Page/any

LOCKSIZE PAGE/ANYLOCKSIZE PAGE/ANY

S E L E C T

S E L E C TUPDATE

UPDATE

Page 234: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 234 -

Granularidade - Locksize Row

LOCKSIZE ROWLOCKSIZE ROW

S E L E C T

S E L E C TUPDATE

UPDATE

Page 235: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 235 -

Granularidade do Lock

• Indica a granularidade com que os recursos são presos.• Em outras palavras o LOCK pode ser dado:

• individualmente a páginas• a todos os segmentos de uma tabela (se a tabela pertence a um TS

segmentado)• individualmente a um tablespace

• LOCK a nível de páginas/linha é trabalhoso para o DB2, mas dá uma maior concorrência.

• LOCK a nível de tabela/tablespace é menos trabalhoso para o DB2, mas pode causar um maior enfileiramento para espera de recursos.

• A granularidade é especificada como parâmetro durante a definição dotablespace

• Para tablespaces segmentados ou particionados , um programa pode sobrepor a granuladidade através do comando LOCK TABLE (PART)

Page 236: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 236 -

Modo do Lock

• Por modos de LOCKING entenda-se modalidade quanto à exclusividade sobre um recurso, que podem ser:

• S : (Shared) compartilhado. O dado está em uso para leitura por um ou mais usuários.

• X :(Exclusive) exclusivo. O dado está em uso por um único usuário e os demais usuários interessados ficam enfileirados.

• U : (UPDATE). O dado está em uso por um usuário com intenção de atualizar. Enquanto ele estiver lendo outros também podem ler (S ), mas quando ele resolver atualizar, o DB2 impede novos acessos e espera os demais usuários terminarem seus serviços para transformar o LOCK em tipo X.

Page 237: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 237 -

Duracão do Lock (cont.)

• Para LOCK de leitura a nível de página ou linha temos quatro es tratégias possíveis:

• R R Repeatable read Os locks são adquiridos conforme as páginas/linhas vão sendo

acessadas e são liberados só com um COMMIT. O RR só deve ser escolhido em situações especiais já que as páginas/linhas ficam presas por muito tempo. O nome vem do fato de que em caso de repetição de leitura tenho a garantia de que ninguém atualizou o intervalo de dados lidos.

• R S Read Stability Os locks são adquiridos somente nas páginas/linhas que satisfazem

todas as condições da clausula WHERE. Permite uma aplicação ler as mesmas páginas/linhas de dados mais de uma vez sem que estes dados tenham sido atualizados por outra aplicação. Oferece maior concorrência que RR, pois embora as outras aplicaçãoes não possam alterar os dados lidos pela aplicação original, elas podem inserir novas linhas.

Page 238: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 238 -

Duracão do Lock (cont.)

• CS Cursor Stability Os locks são adquiridos conforme a necessidade e liberados

quando o programa lê outra página/linha.

• UR Uncommited Read NENHUMlock é adquirido para a leitura das páginas/linhas. Permite

a leitura dos dados sem checar a integridade. O UR só deve ser escolhido em situações especiais aonde a informação lida não precisa estar 100% garantida. Por exemplo: select sum(tot_vendas)from vendas – aonde o usuário só quer ter uma idéia do total de vendas até o momento, sem se importar com a precisão da informação. USAR COM MUITO CUIDADO.

• O R R deve ser evitado

• Quanto aos locks do tipo X, não há diferença com RR, onde a liberação ocorre somente com o COMMIT.

Page 239: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 239 -

Autorizações

Page 240: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 240 -

Segurança do DB2

Qualquer atividade envolvendo qualquer objeto DB2,

recurso ou função, é um privilégio e requer uma autorização.

Page 241: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 241 -

Itens Protegidos

DATABASE CATALOG

TABLESPACE UTILITIES

TABLE COMMANDS

INDEX BIND

VIEW EXECUTE

STORAGE GROUP GRANT

BUFFER POOL

Page 242: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 242 -

Identificação do Usuário do DB2

T S O IMS/DC CICS BATCH

LOGON SIGNON SIGNON PARÂMETRO

USER-ID USER-ID USER-ID USER-ID NO

LTERM TRANSAÇÃO CARTÃO JOB

TERM-ID

T S O IMS/DC CICS BATCH

LOGON SIGNON SIGNON PARÂMETRO

USER-ID USER-ID USER-ID USER-ID NO

LTERM TRANSAÇÃO CARTÃO JOB

TERM-ID

No ambiente de Produção do Banco:BATCH - o Control-M ONLINE - usuário de signon do CICS

Page 243: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 243 -

Comando Grant/Revoke

GRANT Lista de privilégiosON Lista de recursosTO Lista de USER-IDS

[WITH GRANT OPTION]

• GRANT ... ON ... TO PUBLIC

(Essa autorização vale para qualquer USER-ID)

REVOKE Lista de privilégiosON Lista de recursos

FROM Lista de USER-IDS

• REVOKE ... ON ... FROM user1

Page 244: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 244 -

Utilitários

Page 245: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 245 -

Utilitários DB2

QUALQUER TIPODELETA INFORMAÇÕES SOBRE UMA COPIA DA TABELA DO CATÁLOGO ‘SYSIBM.SYSCOPY’ E DO DIRETÓRIO ’SYSIBM.SYSLGRNG’

MODIFY

QUALQUER TIPOJUNTA CÓPIAS INCREMENTAIS E/OU TOTAIS E CRIA UMA NOVA CÓPIA INCREMENTAL E/OU TOTAL

MERGECOPY

NENHUM NO TABLESPACE OU

PARTIÇÃO SENDO CARREGADO

CARREGA DADOS DE UM ARQUIVO SEQUENCIAL P AR A UMA OU MAIS TABELAS NO MESMO TABLESPACE

LOAD

QUALQUER TIPOCRIA UMA CÓPIA (BACKUP) DE UM TABLESPACECOPY

LEITURATESTA INTEGRIDADE REFERÊNCIAL E AS CONTRAINTS

CHECK DATA

LEITURATESTA SE OS INDÍCES ESTÃO CONSISTENTES COM OS DADOS

CHECK INDEX

PROCESSAMENTOCONCORRENTEFUNÇÃO/DESCRIÇÃOUTILITÁRIO

QUALQUER TIPODELETA INFORMAÇÕES SOBRE UMA COPIA DA TABELA DO CATÁLOGO ‘SYSIBM.SYSCOPY’ E DO DIRETÓRIO ’SYSIBM.SYSLGRNG’

MODIFY

QUALQUER TIPOJUNTA CÓPIAS INCREMENTAIS E/OU TOTAIS E CRIA UMA NOVA CÓPIA INCREMENTAL E/OU TOTAL

MERGECOPY

NENHUM NO TABLESPACE OU

PARTIÇÃO SENDO CARREGADO

CARREGA DADOS DE UM ARQUIVO SEQUENCIAL P AR A UMA OU MAIS TABELAS NO MESMO TABLESPACE

LOAD

QUALQUER TIPOCRIA UMA CÓPIA (BACKUP) DE UM TABLESPACECOPY

LEITURATESTA INTEGRIDADE REFERÊNCIAL E AS CONTRAINTS

CHECK DATA

LEITURATESTA SE OS INDÍCES ESTÃO CONSISTENTES COM OS DADOS

CHECK INDEX

PROCESSAMENTOCONCORRENTEFUNÇÃO/DESCRIÇÃOUTILITÁRIO

Page 246: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 246 -

Utilitários DB2 (cont.)

LE I TURAESTABELECE UM ‘QUIESCE POINT’ NO CATÁLOGO PARA O(S) TABLESPACE(S)

QUIESCE

QUALQUER TIPOATUALIZA TABELAS CATÁLOGO COM ESTATÍSTICAS SOBRE UTILIZAÇÃO DE ESPAÇO DE “STORAGE GROUP”

STOSPACE

QUALQUER TIPOATUALIZA TABELAS CATÁLOGO COM ESTATÍSTICAS SOBRE UTILIZAÇÃO DE TABLESPACES EFICIÊNCIA DE ÍNDICES

RUNSTATS

QUALQUER TIPOLISTA INFORMAÇÕES DE TABLESPACESREPORT

PROCESSING

READY-ONLY DURANTE

UNLOAD; NEHUM DURANTE RELOAD

REORGANIZA UM TABLESPACE OU UM INDICEREORG

NENHUMRECUPERA O TABLESPACE, UMA PÁGINA, PARTIÇÃO OU “ERRORANGE”

RECOVER

PROCESSAMENTOCONCORRENTEFUNÇÃO/DESCRIÇÃOUTILITÁRIO

LE I TURAESTABELECE UM ‘QUIESCE POINT’ NO CATÁLOGO PARA O(S) TABLESPACE(S)

QUIESCE

QUALQUER TIPOATUALIZA TABELAS CATÁLOGO COM ESTATÍSTICAS SOBRE UTILIZAÇÃO DE ESPAÇO DE “STORAGE GROUP”

STOSPACE

QUALQUER TIPOATUALIZA TABELAS CATÁLOGO COM ESTATÍSTICAS SOBRE UTILIZAÇÃO DE TABLESPACES EFICIÊNCIA DE ÍNDICES

RUNSTATS

QUALQUER TIPOLISTA INFORMAÇÕES DE TABLESPACESREPORT

PROCESSING

READY-ONLY DURANTE

UNLOAD; NEHUM DURANTE RELOAD

REORGANIZA UM TABLESPACE OU UM INDICEREORG

NENHUMRECUPERA O TABLESPACE, UMA PÁGINA, PARTIÇÃO OU “ERRORANGE”

RECOVER

PROCESSAMENTOCONCORRENTEFUNÇÃO/DESCRIÇÃOUTILITÁRIO

Page 247: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 247 -

Utilitário ''Load''

CARREGA DADOS SEQUENCIALMENTE PARA UMA OU MAIS TABELAS EM UM ''TABLESPACE'' OU PARTIÇÃO

ARQUIVO SEQUENCIALDE ENTRADA

ARQUIVO SEQUENCIALDE ENTRADA

UTILITÁRIO LOAD

UTILITÁRIO LOAD

UMA OU MAIS TABELASDE SAÍDA

Page 248: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 248 -

Executando o Utilitário ''Load''

VISÃO BÁSICA DAS FASES DE EXECUÇÃO DO ''LOAD''

SEQINPUT

PHASE 1LOAD

TABLETABLEDFSORTDFSORT

REGISTROS SORTEADOS

TAB ELATAB ELA

TODOS INDICESTODOS INDICES

PHASE 2SORT

SYSUT1

SYSMAP

ERROS DE DUPLICADOS NO SYSERR

SYSREC

RID MAP DA TABELA

CARREGADA

REGISTROS DO INDICE E FOREIGN

KEY

ERROS DE CONVERSÃO NO SYSERR

INDICESDUPLICADOS

PHASE 4

INDEXVAL

SYSERR

AS DUAS LINHAS DUPLICADAS SÃO REMOVIDAS DA TABELA.

PHASE 3BUILD

Page 249: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 249 -

Executando o Utilitário ''Load'' (cont.)

SEQUENCIALINPUT

PHASE 5

VIOLAÇÕES DE INTEGRIDADE REFERENCIAL

PHASE 6

SYSERR

SYSMAP

PHASE 7

TABELA PARENT TABELAFOREIGN KEY INVÁLIDAS REMOVIDAS

RID MAP DA TABELA

CARREGADA

DISCARD

SYSUT1 SYSDISC

DATA SET DE DISCARD

COMPLETO

RID MAP DA TABELA

CARREGADA

TODAS VIOLAÇÕES ACUMULADAS

REPORT

ENFORCE

SYSERR

ERROR SUMMARY

ERROR SUMMARY

Page 250: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 250 -

LOAD - Fases de Execução

(RE)LOAD O arquivo seqüencial é passado uma vez e todas as tabelas são carregadas. A saída desta fase consiste em:- Arquivo Temporário com todos os registros de índices e chaves estrangeiras.- Um arquivo que contém o 'RID' onde a linha é armazenada na tabela e o endereço relativo do registro fonte da linha (no arquivo seqüencial de entrada).

S O R T Somente é executado se as tabelas tiverem índices. Classifica o índice e as chaves estrangeiras.

BUILD Cria os índices definidos na tabela. Detecta violações de 'índices únicos' e grava registro no arquivo de saída 'SYSERR'.

INDEXVAL Retira fisicamente as linhas que violaram as regras de 'índice único' da tabela. Note que ambas são retiradas.

ENFORCE Verifica se todas as chaves estrangeiras da tabela são iguais àschaves primárias da(s) tabela(s) pai. As linhas encontradas com erro são fisicamente removidas e os registros de erro são gravados noarquivo ‘SYSERR’ .

Page 251: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 251 -

LOAD - Fases de Execução (cont.)

DISCARD Usa o arquivo 'SYSERR' para saber quais linhas tiveram erros e oarquivo 'SYSMAP' para localizá-las no arquivo seqüencial de entrada, esta fase cria um arquivo 'DISCARD'. O arquivo 'DISCARD' pode ser editado (usando 'ISPF') e usado como novo 'INPUT' de 'LOAD' após os erros terem sido corrigidos.

R E P O R T Usa 'SYSERR' para listar todas as linhas que não foram carregadas. Uma linha é considerada errada por qualquer uma das seguintesrazões:- Erros de conversão de dados durante a fase '(RE)LOAD'- Erros de chave duplicada encontrados durante a fase 'BUILD- Erros de integridade referencial descobertos durante a fase 'ENFORCE‘

No Banco é utilizada a opção DISCARD(1). Esta opção especifica o número máximo de registros que podem apresentar erro (qualquer tipo). C om isto, as fases de (RE)LOAD, INDEXAL e ENFORCE abendam no primeiro erro encontrado.

Page 252: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 252 -

LOAD - Cartões de Controle

LOAD DATA INTO TABLE TAB_EMPR

WHEN (1:1)= ‘*’

(MATR POSITION (2:6),NOME POSITION (8:16),.. )

NOME DA COLUNA DESTINO

LOCALIZAÇÃO E TAMANHO DO CAMPO DE INPUT

Page 253: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 253 -

Opções Resume e Replace

• LOAD INICIAL:- Tablespace vazio (Este é o default)

LOAD DATAR E S U ME NOINTO TABLE EMP

• LOAD Adicional :- Tablespace não-vazio

- Para carregar outra tabela no mesmo tablespace- Para adicionar linhas em uma tabela não-vazia

LOAD DATAR E S U ME YESINTO TABLE EMP

• Sobrepor dados antigos:- Esvazia o tablespace e os índices antes do load

LOAD DATAR E P L A C E INTO TABLE EMP

Uma maneira fácil de fazer um refresh dos dados.

Page 254: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 254 -

Exercício - Load

T1,T2 E T2 CONTÉM DADOS

ADICIONAR DADOS NA T2 DE UMARQUIVO SEQUENCIAL ?

FAZER REPLACE DOS DADOS DA T2POR UM ARQUIVO SEQUENCIAL ?

COMO VOCÊ FARIA PARA

Page 255: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 255 -

Opção Log (Yes/No)

Com esta opção é possível carregar os dados mais rápido, porém pode

causar impacto no momento do RECOVER.

LOAD DATA

INTO TABLE PROJ

LOG YES /NO

OBS: quando a opção LOG(NO) é utilizada o tablespace fica com o status

de COPY PENDING a não ser que a opção COPYDDN seja utilizada

Page 256: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 256 -

Utilitário '‘Check Data''

CHECA OS DADOS PARA VERIFICAR SE EXISTEM VIOLAÇÕES DE INTEGRIDADE REFERENCIAL E DE TABLE CHECK CONSTRAINT.

UTILITÁRIO CHECK DATA

UTILITÁRIO CHECK DATA

UM OU MAIS TABLESPACESUSER TABELA A

USER TABELA B

ERROR SUMMARY

ERROR SUMMARY

Page 257: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 257 -

CHECK DATA - Fases de Execução

SCANTAB Extrai as foreign keys ; usa o índice da foreign key, se existir,

senão faz scan table

SORT Faz o sort das foreign keys caso elas não tenham sido extraidas

através do índice.

CHECKDAT Procura no índice da primary key as foreign keys

correspondentes e emite mensagens no relatório para os erros

encontrados.

R E P O R T C K Copia as linhas em erro para as exception tables, e as deleta da

tabela original se DELETE YES foi especificado

Page 258: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 258 -

Opções do CHECK DATA

• FOR EXCEPTION

Copia linhas inválidas para Exception Tables

• DELETE

Deleta linhas inválidas e todas as descendentes (Exception Table é requerida)

• SCOPE

- PENDING

Indica que somente as linhas das tabelas ou partições que estão em CHECK pending status devem ser checadas

- A L L

Checa todas as linhas de todas as tabelas existentes no tablespaceespecificado

• EXCEPTIONS nTermina o utilitário após n+ 1erros

Page 259: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 259 -

Utilitário '‘Runstats''

OBTEM INFORMAÇÕES SOBRE A CARACTERÍSTICA DOS DADOS NOS TABLESPACES, ÍNDICES E PARTIÇÕES QUE SERÃO ARMAZENADAS NO CATÁLOGO E USADAS PELO DB2 PARA DEFINIR O MÉTODO DE ACESSO DURANTE O BIND. TAMBÉM PODEM SERUSADAS PELO DBA PARA AVALIAR A NECESSIDADE DE REORGANIZAÇÃO DOS DADOS

NÚMERO DE LINHAS NA TABELA ?CLUSTER OK ?NÍVEL DOS ÍNDICES ?NÚMERO DE VALORES DISTINTOS DE UMA COLUNA?

REORGANIZAR ?

Page 260: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 260 -

Runstats - Fase de Execução

RUNSTATS Faz scan no tablespace e atualiza o catálogo.

OBS: No Banco existe uma rotina pronta para o R unstats , solicitar a criação ao analista de produção.

Page 261: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 261 -

Opções do Runstats

• REPORT NO | Y E S

Produz um relatório com as estatísticas obtidas pelo Runstats

• UPDATE ALL | NONE | SPACE | ACCESSPATH

ALL - inclui ambas opções SPACE e ACCESSPATH

NONE - não atualiza o catálogo

SPACE - atualiza informações relativas a gerenciamento de espaço.

ACCESSPATH - atualiza informações usadas pelo Optimizer

Page 262: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 262 -

Opções do Runstats (cont.)

• Para rodar somente para o Tablespace e ignorar os índices

RUNSTATS TABLESPACE INVDB11. INVS0001

• Para rodar para Tablespace e Índices

RUNSTATS TABLESPACE INVDB11. INVS0001 INDEX

• Para obter estatística para uma coluna específica

RUNSTATS TABLESPACE INVDB11. INVS0001

TABLE( INVDB111. T_ INVOICE) COLUMN( R_ INVOICE)

SAMPLE 25

• Para somente um índice To run against only one index of TS

RUNSTATS INDEX INVDB111

Page 263: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 263 -

Considerações sobre Runstats

•Rodar o Runstats após um LOAD ou REORG, para atualizar o

catálogo do DB2.

- SQL Dinâmico vai ser benificiado automaticamente

- SQL estático precisará de um rebind.

Page 264: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 264 -

Utilitário '‘COPY''

CRIA UM BACKUP DE UM TABLESPACE OU DE UMA PARTIÇÃO.

UTILITÁRIO C O P Y

UTILITÁRIO COPY

TABLESPACEUSER TABELA A

USER TABELA B

IMAGE COPY

Page 265: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 265 -

COPY - Fases de Execução

R E P O R T Produz um relatório quando a opção CHANGELIMIT é utilizada

COPY Cópia do objeto

Page 266: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 266 -

Opções do Copy

• F U L L

YES

Cria um backup completo do tablespace/partition

COPY TABLESPACE DB01. TS01

NO

Cria um backup incremental do tablespace/partition

COPY TABLESPACE DB01. TS02

FULL NO

• CONCURRENT

Executa o DFSMS concurrent copy para tirar um full image copy.

Page 267: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 267 -

Copy Incremental e Mergecopy

T E MPO

DADOS CÓPIA CÓPIA CÓPIA

Page 268: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 268 -

Recover

RECUPERA OS DADOS USANDO UMA CÓPIA E APLICANDO OS REGISTROS DA LOG

T E M P O

DADO RECUPERADO

DADO NÃO ACESS ÍVEL

DADOSALTERAÇÕESNOS DADOS

Page 269: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 269 -

RECOVER - Fases de Execução

R E S T O R E Localiza e faz um merge das cópias disponíveis e recupera o

tablespace para o nível do backup

LOGAPPLY Aplica os registros da log no tablespace recuperado

Page 270: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 270 -

RECOVER - Agilização do processo

TEMPO

DADO RECUPERADO

DADO NÃO ACESS ÍVEL

DADOSCÓPIA CÓPIACÓPIA

Page 271: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 271 -

RECOVER - Para um ponto no tempo

TEMPO

DADOS

DADO RECUPERADO

ALTERAÇÕESNOS DADOS DADO DANIFICADO

LOGICAMENTE

PROCESSOSPERDIDOS

PONTO DEQUIESCE

Page 272: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 272 -

RECOVER - Para um ponto no tempo

• T O R B A

É usado para especificar um ponto na log para a recuperação FULL

• TOCOPY

Especifica qual a cópia o DB2 deve usar para recuperar os dados.

Page 273: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 273 -

DSNTIAUL – Programa SAMPLE para UNLOAD

FAZ O UNLOAD DE ALGUMAS OU TODAS AS LINHAS DE ATÉ 100 TABELAS AO MESMO TEMPO. O FORMATO DO UNLOAD É COMPATÍVEL COM O LOAD E ELE TAMBÉM GERA OS CARTÕES DE CONTROLE PARA O LOAD.

UMA

OU

MAIS

TABELASDE

SAÍDA

DSNTIAULDSNTIAUL

ARQUIVOSEQUENCIALDE OUTPUT

UMA OU MAIS TABELASDE ENTRADA

USER TABELA A

USER TABELA B

Page 274: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 274 -

DSNTIAUL - DATA SETS e PARÂMETRO

Data Set Description

SYSIN Datasetde input.

SYSPR INT Datasetde output. DSNTIAUL escreve erros e mensagens informativas neste dataset.

SYSPUNCH Dataset de output. DSNTIAUL escreve os cartões de controle para o LOAD neste dataset.

SYSRECnn Datset de output. O valor nn tem intervalo de 00 até 99. É possível ter no máximo 100 datasets de output por execução do DSNTIAUL. Cadadataset contém os dados que foram ‘unload’pelo DSNTIAUL. O número deste dataset deve ser igual ao número de statements de SELECT ou de tabelas do dataset de input.

O ÚNICO PARÂMETRO ACEITO PELO DSNTIAUL É SQL

Page 275: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 275 -

DSNTIAUL - Exemplos

//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20//SYSTSPRT DD SYSOUT=*//SYSTSIN DD *DSN SYSTEM(DSN)RUN PROGRAM(DSNTIAUL) PLAN(DSNTIB61) PARMS('SQL') -

LIB('DSN610.RUNLIB.LOAD')//SYSPRINT DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSREC00 DD DSN=DSN8UNLD.SYSREC00,// UNIT=SYSDA,SPACE=(32760,(1000,500)),DISP=(,CATLG),// VOL=SER=SCR03//SYSREC01 DD DSN=DSN8UNLD.SYSREC01,// UNIT=SYSDA,SPACE=(32760,(1000,500)),DISP=(,CATLG),// VOL=SER=SCR03//SYSPUNCH DD DSN=DSN8UNLD.SYSPUNCH,// UNIT=SYSDA,SPACE=(800,(15,15)),DISP=(,CATLG),// VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=1200//SYSIN DD *SELECT * FROM DSN8610.PROJ;SELECT * FROM DSN8610.EMPWHERE WORKDEPT LIKE 'D%'ORDER BY EMPNO;

Page 276: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 276 -

DSNTIAUL - Exemplos

//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20//SYSTSPRT DD SYSOUT=*//SYSTSIN DD *DSN SYSTEM(DSN)RUN PROGRAM(DSNTIAUL) PLAN(DSNTIB61) -

LIB('DSN610.RUNLIB.LOAD')//SYSPRINT DD SYSOUT=*//SYSUDUMP DD SYSOUT=*//SYSREC00 DD DSN=DSN8UNLD.SYSREC00,// UNIT=SYSDA,SPACE=(32760,(1000,500)),DISP=(,CATLG),// VOL=SER=SCR03//SYSPUNCH DD DSN=DSN8UNLD.SYSPUNCH,// UNIT=SYSDA,SPACE=(800,(15,15)),DISP=(,CATLG),// VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=1200//SYSIN DD *DSN8610.PROJ WHERE DEPTNO='D01'

Page 277: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 277 -

Stored Procedures Introdução

O QUE SÃO E PARA QUE SERVEM AS STORED PROCEDURES Stored Procedures são programas contendo comandos sql de acesso ao banco de dados, que rodam junto do servidor de bancos de dados (na mesma máquina e sistema operacional), sob o controle do servidor RDBMS, em ambiente próprio e separado do aplicativo que as invoca. Stored Procedures são armazenadas em bibliotecas funcionais compartilhadas e acessadas pelo RDBMS. As sp são invocadas por um aplicativo que desempenha o papel de client. Esse aplicativo pode estar rodando localmente no mesmo servidor que o RDBMS ou em qualquer outra máquina com acesso ao servidor db2. A invocação de sp é feita no db2 com um comando “call”. Note-se que com rdbms de outros fabricantes o comando de invocação pode ser diferente de “call” ( e.g. O ms sql usa “execute” ), assim como as regras de programação e ligação podem ser diferentes também. Por esse motivo, conhecimentos prévios de outros sw, podem não se aplicar a db2 stored procedures. Porque razão iríamos querer usar stored procedures em vez de efetuar todos os acessos sql no programa invocador? Existem dois tipos de situação em que é mais recomendável o uso de sp:

Page 278: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 278 -

DESEMPENHO ( PERFORMANCE ).

Quando os aplicativos rodam remotamente, pelo fato de a sp rodar no mesmo servidor, o acesso local ao rdbms é mais eficiente que via rede. Além disso, como a sp é controlada diretamente pelo rdbms, a comunicação entre estes é mais otimizada que entre um aplicativo comum e o rdbms. Tipicamente, a execução de um conjunto de comandos sql é mais rápida quando estes estão numa sp que quando são executados, um por vez, num programa comum. SEGURANÇA.

Em geral um ambiente de servidor é mais controlado e protegido de acessos indevidos. máquinas desktop são mais vulneráveis. Os programas existentes num servidor estão mais protegidos contra adulterações e seu ambiente de processamento também é mais seguro. Programas que implementam as partes mais confidenciais e importantes de um sistema, muitas vezes não estariam seguros em desktops. Stored procedures são uma das alternativas que dispomos para isolar as funções de acesso a banco de dados mais sensíveis. Outra razão que poderia indicar o uso de stored procedures é que pelo fato de estas rodarem no servidor, podem usar comandos que não estão disponíveis para os clients, como por exemplo “list database directory”. Além disso, stored procedures também podem fazer acesso a recursos de software e storage diponiveis apenas no servidor.

Page 279: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 279 -

CALL SINTAXE CALL proc-name ( parametro, ... ) USING DESCRIPTOR descriptor-name proc-name INDICA O NOME DA PROCEDURE Pode ser especificado como constante ou como host variable. Se for uma constante, então não poderá conter brancos ou caracteres especiais e será convertido para maiúsculas. USING DESCRIPTOR descriptor-name Identifica a sqlda que descreve as host variables usadas como parâmetros, no caso da procedure ser invocada dessa forma. O programa que chama a stored procedure deverá inicializar a sqlda: SQLN indica o numero de ocorrências de SQLVAR na SQLDA SQLDABC a memória em BYTES alocada para a SQLDA SQLD quantidade de variáveis usadas na SQLDA para processar um statement

Page 280: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 280 -

Para cada ocorrencia de SQLVAR Base devem ser indicados os atributos das variaveis, devendo ser inicializados os seguintes campos: SQLTYPE SQLLEN SQLDATA SQLIND Devem ser inicializados os seguintes campos de cada Secondary SQLVAR element: LEN.SQLLONGLEN SQLDATALEN SQLDATATYPE_NAME Presume-se que cada sqlda seja usada para trocar dados em ambos os sentidos, entre o programa e a procedure. Se o programa não usar o parâmetro para transmitir dados para a procedure, o campo “sqlind” deverá ser inicializado com o valor –1 pelo programa. Se a procedure não usar o parâmetro para transmitir dados para o programa, o campo “sqlind” deverá ser inicializado com o valor –128 pela procedure

Page 281: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 281 -

CREATE PROCEDURE É o comando sql que define uma stored procedure no db2 Stored procedures escritas em sql pl são definidas completamente pelo comando “create procedure”, ou seja, os comandos fonte fazem parte do corpo do comando “create procedure” Quando escritas em linguagens diferentes de sql pl, as stored procedures são programas criados à parte e catalogados no db2 pelo comando “create procedure”, onde se faz referencia ao nome do executavel. Esses programas têm de ter sido objeto de prepare, bind, compilação, edição de ligações (linkedited), e catalogação em biblioteca reconhecida pelo db2.

Page 282: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 282 -

EXEMPLOS CREATE PROCEDURE nome_cliente (IN codigo INT, OUT nome CHAR(10)) EXTERNAL NAME ‘nome.cli’ LANGUAGE JAVA PARAMETER STYLE JAVA CREATE PROCEDURE descricao_produto (IN cod_prod INT, OUT descricao CHAR(40)) EXTERNAL NAME ‘prod_descr’ DYNAMIC RESULT SETS 1 NOT FENCED LANGUAGE C PARAMETER STYLE GENERAL CREATE PROCEDURE descricao_produto (IN codigo_produto INT, OUT descricao CHAR(40)) DYNAMIC RESULT SETS 1 LANGUAGE SQL BEGIN DECLARE EXIT HANDLER FOR NOT FOUND SET descricao = ‘ ‘ ; SELECT DESCRICAO_PRODUTO INTO descricao FROM PRODUTOS WHERE COD_PROD = codigo_produto; END

Page 283: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 283 -

PARÂMETROS Schema.procname O nome da procedure é usado para identifica-la no comando “call” O sistema permite a existência de mais de uma procedure com o mesmo nome e pertencente ao mesmo schema, mas com quantidade de parâmetros diferente. Por esse motivo é preciso que o comando “call” passe o número de parâmetros definidos na procedure, ou esta não será reconhecida. Em operações como “drop” em que não se usam parâmetros, pode ser usado o nome indicado pelo atributo specific. ( IN | OUT | INOUT parameter-name datatype, … ) Os parametros permitem que a stored procedure receba dados do programa que executante e repasse dados para este. In – indica que este é um parâmetro de input Out – indica que este é um parâmetro de output Inout – indica que este parâmetro é usado como input e output Datatype – tipo de dados do parâmetro os mesmos tipos de dados usados pelo “create table”

Page 284: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 284 -

PROGRAMAÇÃO DE SP

Page 285: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 285 -

REGRAS GERAIS Não use comandos que finalizam o processo, como stop run ou exit em stored procedures que rodam como subprogramas. Use return ou goback. Não use set current sqlid Não use attachment facility calls explícitos ( os/390 ) Em db2 established address spaces o db2 usa caf ( call attachment facility ) calls implícitos Em wlm o db2 usa rrsaf calls ( recoverable resource manager services ) implícitos Não podem ser usados comandos de conexão e operativos: BACKUP CONNECT CONNECT TO CONNECT RESET CREATE DATABASE DROP DATABASE FORWARD RECOVERY RESTORE O db2 não permite usar overload (procedures diferentes com a mesma identificação) em procedures com o mesmo número de parâmetros, mesmo que sejam de tipos diferentes. Com exceção de procedures em db2 cli e jdbc, tem de ser feito bind.

Page 286: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 286 -

Quando um client chama uma sp remota, deve inicializar todos os parâmetros antes do call, inclusive os de output, porque nesse caso o db2 não tem como distinguir os parâmetros de output dos de input As stored procedures devem declarar os parâmetros com tipos de dados compatíveis com as convenções do sql, para que não ocorram problemas de resolução ou mesmo de incompatibilidade entre as variáveis hospedeiras e as colunas das tabelas.

COMMIT E ROLLBACK As stored procedures invocadas por um programa client executam na mesma transação ( luw - logical unit of work ) que o programa client. Quando é executado um commit ou rollback dentro de uma stored procedure, é terminada a luw afetando todas as alterações feitas tanto pela sp como pelo programa client Uma procedure que contém commit ou rollback, deve ser definida (create procedure) como contains sql, reads sql data ou modifies sql data Se a procedure tiver sido definida com commit on return yes, será executado um commit ao final da procedure, independentemente de a procedure conter commits ou rollbacks Os cursores do client também são afetados por commit ou rollback dentro da procedure. Rollback fecha todos os cursores Commit fecha todos os cursores com exceção daqueles declarados com with hold

Page 287: Apostila DB2 Para Desenvolvedores

Anotações: Domini Treinamento – DB2 para Desenvolvedores - 287 -

Commit e rollback não podem ser usados em procedures nas seguintes situações:

- Aninhadas em triggers ou functions - Quando o client usa uma luw em two phase commit

- O client usa type 2 connect para um server que contém a stored procedure

Não pode ser usado rollback numa sp, se o db2 não for o coordenador de transação. Não é permitido usar commit em sps catalogadas com a cláusula no sql.