Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13......

35
GENNARI & PEARTREE PROJETOS E SISTEMAS BANCO DE DADOS DB2 Desenvolvida para o programa de treinamento Unibanco por:

Transcript of Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13......

Page 1: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

GENNARI & PEARTREE PROJETOS E SISTEMAS

BANCO DE DADOS DB2

Desenvolvida para o programa de treinamento Unibanco por:Luiz Roberto de Souza

Page 2: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

ÍNDICE ANALÍTICO

1. BANCO DE DADOS DB2...................................................................................................................2

1.1. INTRODUÇÃO...................................................................................................................................21.2. CATÁLOGO......................................................................................................................................21.3. TABELAS DB2.................................................................................................................................21.4. TIPOS DE DADOS DB2.....................................................................................................................21.5. CHAVES...........................................................................................................................................3

2. RELACIONAMENTOS......................................................................................................................4

2.1. TIPOS DE RELACIONAMENTOS.........................................................................................................42.2. INTEGRIDADE REFERENCIAL............................................................................................................52.3. REGRAS DE INTEGRIDADE REFERENCIAL DO DB2..........................................................................5

3. A LINGUAGEM SQL..........................................................................................................................6

3.1. INTRODUÇÃO...................................................................................................................................63.2. DB2 INTERACTIVE (DB2 INTERATIVO) – SPUFI...........................................................................63.3. OPERADORES RELACIONAIS............................................................................................................73.4. COMANDOS DA STRUCTURED QUERY LANGUAGE.........................................................................73.5. TABELAS EXEMPLO.........................................................................................................................83.6. SELECT BÁSICO.............................................................................................................................93.7. SELECT AVANÇADO....................................................................................................................143.8. UPDATE......................................................................................................................................153.9. DELETE.......................................................................................................................................153.10. INSERT......................................................................................................................................16

4. O DB2 E O COBOL...........................................................................................................................17

4.1. LINGUAGEM HOSPEDEIRA.............................................................................................................174.2. SQLCA.........................................................................................................................................184.3. VARIÁVEIS HOST..........................................................................................................................184.4. SQLCODE....................................................................................................................................194.5. TRABALHANDO COM CONJUNTO DE REGISTROS...........................................................................19

4.5.1. Cursor...................................................................................................................................19

5. EXERCÍCIOS.....................................................................................................................................20

DB2 e Linguagem SQL Página 1

Page 3: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

1. BANCO DE DADOS DB21.1. Introdução

O DB2 é um gerenciador de bancos de dados relacional, desenvolvido pela IBM para acessar e manipular as bases de dados. Faz uso da linguagem SQL como DML (Data Manipulation Language – Linguagem de Manipulação de Dados).

Roda apenas em ambiente MVS, mas existe também uma versão de banco de dados relacional desenvolvida para o DOS/VSE denominada SQL/DS. Seu manuseio é idêntico ao do DB2 em termos de programação.

Este curso é introdutório, e nele aprenderemos os conceitos básicos do DB2, e os principais comandos da linguagem SQL, utilizada para acesso as bases.

1.2. CatálogoO catálogo é um elemento muito importante no banco de dados DB2. Trata-se na

verdade de um arquivo no qual são armazenadas as definições de todos os elementos: as tabelas com suas respectivas características e os índices.

1.3. Tabelas DB2A estrutura de arquivo de uma tabela DB2 pode ser comparada a de um arquivo

DBASE/CLIPPER. A tabela DB2 estará dividida em linhas (que chamaremos de registros) e colunas (que serão os nossos campos).

Analogamente ao DBASE, quando se cria uma tabela DB2, cada um dos campos do registro precisa ser previamente definido e nomeado. Cada uma dessas colunas, com seu respectivo nome, será a referência que o DB2 terá para tratar cada dado que será armazenado.

Observe com isso, uma diferença gritante com os arquivos que utilizávamos em Cobol. O chamado Registro 0. Os arquivos do VSAM por exemplo apenas contém informações gravadas no disco, agrupadas por linhas. De dentro do nosso programa determinamos como cada informação será acessada, dando seus nomes na DATA DIVISION e podendo inclusive tratar cada registro de maneira diferente (header, detalhe e trailler). Na tabela DB2 o nome do campo também é obrigatoriamente gravado na tabela.

1.4. Tipos de dados DB2Os tipos de dados, como já sabemos, definem os tipos de informações que podem ser

armazenadas pelos campos. Os campos são definidos durante a criação da tabela, procedimento que deve ser realizado apenas pelo DBA (Data Base Administrator). Ao programador cabe saber o que quer dizer cada definição.

DB2 e Linguagem SQL Página 2

Page 4: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Observe a tabela:

Tipo DB2 Descrição Correspondente COBOL

CHAR Alfanumérico PIC X

DECIMAL Numérico PIC 9 COMP-3

DATE Valores do tipo data PIC X(10)

TIME Valores do tipo hora PIC X(06)

TIMESTAMP Valores de data com hora PIC X(26)

INT Inteiros com sinal PIC S9(9) COMP

SMALLINT Inteiros menores PIC S9(4) COMP

OBSERVAÇÕES

Decimal todos os campos numéricos para o DB2 são armazenados no formato compactado. Portanto, sempre serão acessados no Cobol através de variáveis COMP-3.

Date os valores definidos como date são armazenados no formato aaaammdd, compactado. Porém, os comandos de acesso ao DB2 sempre receberão e enviarão as datas no formato aaaa-mm-dd (depende do adotado pe lo cliente).

Time os comandos de acesso ao DB2 sempre receberão e enviarão os horas no formato hh:mm:ss.

Valor NULL Null representará a ausência de informação em um determinado campo. Não será 0 (zero) nem espaço em branco. Por exemplo, na digitação de um saldo, zero será um valor absolutamente válido porém, deixar o campo sem digitar nada não será permitido.

Cabeçalho ou Registro 0 Codigo Nome Fone

Registro 1 001 Fulano de Tal 2527070

Registro 2 002 Ciclano da Silva 9714698

Registro 3 003 Jurema Emengarda 2345696

Registro 4 004 Eustákio Parreira 2302156

Registro 5 005 Astrogildo Figueira 2236652

1.5. ChavesUma chave é um campo que será utilizado para a criação de um índice e,

consequentemente, utilizado como argumento de pesquisa em uma tabela.

A chave primária será o primeiro índice de uma tabela. É também aquele que torna o registro único, ou seja, nenhum outro na tabela inteira será igual a ele.

Uma chave estrangeira é constituída de um ou mais campos de uma tabela que se referem à chave primária de uma outra tabela. Ela indica um relacionamento entre as duas.

DB2 e Linguagem SQL Página 3

Page 5: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

2. RELACIONAMENTOSOs dados são representados na forma de tabelas, que podem possuir diversas

associações entre si, as quais serão chamadas de relacionamentos.

Suponha as tabelas de Produtos e Fornecedores a seguir:

Código Produto Nome Fornecedor Código Fornecedor Razão Social

001 A 01 01 Empresa S/A

002 B 01 02 Indústria Ltda.

003 C 03 03 Fábrica Ind. e Com.

004 D 02 04 Siderúrgica do Ferro

005 E 01 05 Mineradora de Minério

006 F 04 06 Eng. Engenharia Ltda.

007 G 05

008 H 06

009 I 02

010 J 04

Determinaremos para a tabela Produtos o campo Código Produto como sendo chave primária. Isso quer dizer que ele nunca se repetirá na tabela (haverá apenas um produto de código 001, um produto de código 002 e assim por diante). Na tabela Fornecedores o campo Código Fornecedor será a chave primária com as mesmas características. Isso representa que foram criados até então dois índices diferentes que poderão ser utilizados para localizar registros de forma mais rápida.

Em um dado momento, pode ser interessante saber quem é o fornecedor de um determinado produto, bem como obter outras informações deste fornecedor. Primeiramente, devemos determinar o que há de comum entre os registros das duas tabelas. Observaremos então que cada uma das tabelas possui um campo destinado a armazenar o código do fornecedor. Este campo pode ser um elo de ligação entre elas.

Sendo assim, se tomarmos como referência a tabela Produtos, o campo Código Produto será a chave primária e Código Fornecedor da tabela Fornecedores será uma chave estrangeira. Uma observação muito importante deve ser levada em consideração: os campos que são utilizados para ligação entre duas tabelas devem possuir as mesmas propriedades.

Na associação lógica entre as ocorrências das entidades, as chaves primárias e estrangeiras serão utilizadas como argumentos de um operador relacional da linguagem SQL.

2.1. Tipos de relacionamentosRelacionamentos um para muitos

Em um relacionamento do tipo um para muitos, qualquer ocorrência de uma entidade pode estar associada à várias ocorrências em outra entidade. Qualquer outra deve estar

DB2 e Linguagem SQL Página 4

CamposCampos

Registros

Page 6: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

associada à apenas uma ocorrência da primeira. Por exemplo, um fornecedor pode fornecer vários produtos.

Relacionamentos muitos para muitos

Em um relacionamento deste tipo, qualquer ocorrência de ambas as entidades pode estar associada à várias ocorrências da entidade oposta.

Exemplo:

EMPREGADOS PROJETOS

Josefina Natal

Pafúncio Qualidade

Godofredo

Supondo Empregados como tabela primária, e a chave primária de Projetos como estrangeira, Josefina e Godofredo estão alocados no projeto Natal (n:1). Porém, observe que Pafúncio sozinho está alocado nos projetos Natal e Qualidade (1:n).

2.2. Integridade referencialA integridade referencial garante que qualquer valor apontado pela chave estrangeira

tenha um valor correspondente na chave primária à qual está associada. Por exemplo, na tela de cadastro de produtos não é possível especificar um código de fornecedor que não tenha sido previamente cadastrado na tabela fornecedores.

No DB2 a integridade referencial é implementada através da programação SQL. Em outros bancos de dados, como Access do ambiente Windows, existe o objeto relacionamento criado juntamente com os demais objetos do sistema. Neste caso, através de propriedades predefinidas, a integridade pode ser estabelecida automaticamente.

2.3. Regras de integridade referencial do DB2 Uma chave primária tem valor único e não nulo;

Uma chave estrangeira é nula ou tem valor correspondente na chave primária;

Todas as tabelas associadas entre si via regra de integridade referencial forma um conjunto chamado de ESTRUTURA REFERENCIAL ou REFERENTIAL STRUCTURE;

Uma tabela com chave primária definida é chamada de PARENT TABLE ou TABELA MÃE;

Uma tabela com chave estrangeira definida é chamada de DEPENDENT TABLE ou TABELA DEPENDENTE;

Uma linha da PARENT TABLE é chamada de PARENT ROW ou LINHA MÃE se existir pelo menos uma linha na tabela dependente com chave estrangeira correspondente à sua chave primária;

Uma linha de uma DEPENDENT TABLE é chamada de DEPENDENT ROW ou LINHA DEPENDENTE se existir uma linha mão com valor de chave primária correspondente à da sua chave estrangeira.

DB2 e Linguagem SQL Página 5

Page 7: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Quando ocorre a deleção de uma linha da tabela mãe, podem ocorrer situações conforme segue:

CASCADE todas as linhas dependentes são eliminadas juntamente com a mãe;

SET NULL regra onde as chaves estrangeiras das linhas dependentes são atualizadas com valor nulo após a eliminação da mãe.

RESTRICT a eliminação da linha mãe é impedida. Neste caso somente as linhas que não são mãe podem ser eliminadas.

3. A LINGUAGEM SQL3.1. Introdução

A SQL (Structured Query Language ou Linguagem Estruturada de Consultas) originou-se inicialmente em 1970 de uma linguagem chamada Sequel. Na verdade, em inglês, muitas vezes tem seu nome pronunciado como Sequel em lugar de ess cue ell. Hoje ela possui diversas variações e é utilizada para acesso a muitas bases de dados diferentes.

Pode ser encarada também como uma espécie de linguagem universal para acesso a bancos de dados. Encontraremos SQL em DB2, Delphi, Access, Visual Basic e na grande maioria dos gerenciadores de bancos de dados atuais. Isso significa que um programador conhecedor de SQL tem uma grande vantagem e pode trabalhar em vários ambientes e bases de dados diferentes.

3.2. DB2 Interactive (DB2 Interativo) – SPUFIO DB2 Interativo é constituído por um conjunto de programas que possibilitam a

execução imediata de alguma tarefa na base de dados.

O SPUFI (SQL Processing Using File Input – Processador de SQL Usando Arquivo de Entrada) é uma ferramenta para executar instruções SQL. Trabalha com um arquivo de entrada e um arquivo de saída. Dirige o usuário para um ciclo de trabalho que consiste basicamente de três fases:

EDIT edição de arquivo de entrada onde é codificada uma ou mais instruções SQL;

EXECUTE interpreta e executa as instruções constantes do arquivo de entrada.

BROWSE mostra o arquivo de saída como um relatório do resultado da execução

DB2 e Linguagem SQL Página 6

Page 8: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

3.3. Operadores relacionaisOperador Significado

= Igual

<> ou ¬= Diferente

> Maior

>= Maior ou igual

< Menor

<= Menor ou igual

¬> Não maior

¬< Não menor

3.4. Comandos da Structured Query LanguageAbaixo, veremos uma listagem dos comandos SQL que utilizaremos em nossos

programas Cobol. Depois veremos a sintaxe de cada um deles e exemplos de utilização.

DML (Data Manipulation Language – Linguagem de Manipulação de Dados)

SELECT pesquisa de dados

UPDATE atualização de dados

DELETE deleção de dados

INSERT inserção de dados

DB2 e Linguagem SQL Página 7

Page 9: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

DDL (Data Definicion Language – Linguagem de Definição de Dados)

CREATE definição de um objeto (tabela, índice, etc.)

ALTER alteração da definição de um objeto

DROP deleção de um objeto (não confundir com dados)

CONTROL

GRANT fornece um privilégio

REVOKE revoga um privilégio

3.5. Tabelas exemploAs tabelas a seguir serão utilizadas como base para a execução de todos os comandos

que iremos aprender:

PRODUTOS

Codigo Nome Preco Fornecedor

001 Drive CD-ROM 2X 13,01 04

002 Ensacador de fumaça 45,32 01

003 Placa FAX/Modem 2.400 bps 0,50 03

004 Prego de areia 7,42 01

005 Calibrador de pneu de trem 56,23 03

006 Microcomputador PC 4,77 MHz 2,37 04

007 Enxugador de gelo seco 12,36 01

008 Impressora matricial Rima XT 180 10,00 03

009 Tesoura d’água 5,00 02

010 Vídeo Cassete Betamax 150,00 02

FORNECEDORES

Codigo Razao Cidade

01 ACME & Pernalonga Associados Bauru

02 Agapê Corp. Pederneiras

03 Itautreco São Paulo

04 Ibeême do Brasil Ltda. Bauru

DB2 e Linguagem SQL Página 8

Page 10: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

3.6. SELECT básicoPesquisa por registros em uma tabela, podendo retornar um registro único (apenas o

primeiro encontrado) ou gerar um conjunto de registros que poderá ser tratado independentemente. Dentro do Cobol o conjunto gerado será chamado de cursor.

Sintaxe:

SELECT [DISTINCT] <campos>

FROM <tabela>

WHERE <condição>

ORDER BY <campo> [ASC | DESC]

Não há necessidade dos argumentos do comando SELECT serem colocados em linhas diferentes. Tal codificação é utilizada apenas para efeitos de melhor entendimento do programa que está sendo escrito.

Exemplos:

Para todos os registros de uma tabela disponibilizando apenas alguns campos

SELECT CODIGO, NOME, PRECO

FROM PRODUTOS

Para selecionar todos os registros de uma tabela disponibilizando também todos os campos

SELECT *

FROM PRODUTOS

Todas as vezes que se quiser selecionar todos os campos de uma tabela, basta substituir a lista de nomes de campos por um asterisco (*).

DB2 e Linguagem SQL Página 9

Page 11: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Selecionar todos os campos que satisfaçam uma determinada condição

Aqueles que possuam preço superior a 10

SELECT * FROM PRODUTOS

WHERE PRECO > 10

Codigo Nome Preco Fornecedor

001 Drive CD-ROM 2X 13,01 04

002 Ensacador de fumaça 45,32 01

005 Calibrador de pneu de trem 56,23 03

007 Enxugador de gelo seco 12,36 01

010 Vídeo Cassete Betamax 150,00 02

Outros exemplos de condições

SELECT * FROM PRODUTOS

WHERE PRECO >= 10 AND PRECO <=50

SELECT * FROM PRODUTOS

WHERE PRECO < 10 OR PRECO > 50

SELECT * FROM PRODUTOS

WHERE FORNECEDOR <> 1

Observe que podem ser utilizadas também múltiplas condições, ligadas através dos operadores lógicos AND e OR.

O uso de parênteses para impor a ordem em que as expressões lógicas serão resolvidas também é permitido conforme segue:

SELECT * FROM PRODUTOS

WHERE FORNECEDOR = 1 AND (PRECO < 10 OR PRECO > 30)

Codigo Nome Preco Fornecedor

002 Ensacador de fumaça 45,32 01

DB2 e Linguagem SQL Página 10

Page 12: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Procurando por um conjunto predefinido de valores

SELECT * FROM PRODUTOS

WHERE FORNECEDOR IN (2 , 3 , 4)

O conjunto resultante será:

Codigo Nome Preco Fornecedor

001 Drive CD-ROM 2X 13,01 04

003 Placa FAX/Modem 2.400 bps 0,50 03

005 Calibrador de pneu de trem 56,23 03

006 Microcomputador PC 4,77 MHz 2,37 04

008 Impressora matricial Rima XT 180 10,00 03

009 Tesoura d’água 5,00 02

010 Vídeo Cassete Betamax 150,00 02

Observe que a expressão

FORNECEDOR IN (2 , 3 , 4)

substitui a expressão

FORNECEDOR = 2 OR FORNECEDOR = 3 OR FORNECEDOR = 4

Selecionando registros em que determinado campo esteja em um intervalo fechado de valores

SELECT * FROM PRODUTOS

WHERE PRECO BETWEEN 10 AND 50

O conjunto resultante será:

Codigo Nome Preco Fornecedor

001 Drive CD-ROM 2X 13,01 04

002 Ensacador de fumaça 45,32 01

007 Enxugador de gelo seco 12,36 01

008 Impressora matricial Rima XT 180 10,00 03

A cláusula BETWEEN (entre) determina todos os registros cujo campo esteja entre o valor inicial e o valor final especificados, inclusive.

DB2 e Linguagem SQL Página 11

Page 13: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Sendo assim,

PRECO BETWEEN 10 AND 50

é igual a

PRECO >= 10 AND PRECO <= 50

Selecionando registros através de pesquisas parciais

SELECT * FROM FORNECEDORES

WHERE RAZAO LIKE ‘A%’

O conjunto resultante será:

Codigo Razao Cidade

01 ACME & Pernalonga Associados Bauru

02 Agapê Corp. Pederneiras

A cláusula LIKE permite que sejam utilizados dois caracteres como curingas para estabelecer um padrão a ser utilizado na consulta.

O caracter % especifica uma seqüência de caracteres quaisquer e o caracter _ (sublinhado) indica a substituição de um único caracter.

Sendo assim, RAZAO LIKE ‘A%’ traria todos os fornecedores cuja razão social começa com a letra ‘A’, não importando quais ou quantos caracteres viessem depois. Este caracter também pode ser utilizado no meio ou no final da cláusula LIKE.

Observe agora outros exemplos dos curingas da cláusula LIKE:

Padrão Exemplos de retorno

‘LU%’ Luiz

Luciane

Luís

Lucas

Luzia

‘LUI_’ Luiz

Luis

‘LU_Z Luiz Roberto

Luíz Carlos

Luiz Augusto

DB2 e Linguagem SQL Página 12

Page 14: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

OBS Para negar os operadores LIKE e BETWEEN basta inserir o operador lógico NOT antes deles. Por exemplo, o comando abaixo localiza todos os registros em que o preço não esteja entre 10 e 50 inclusive:

SELECT * FROM PRODUTOS

WHERE PRECO NOT BETWEEN 10 AND 50

Selecionando registros com valores nulos

SELECT * FROM PRODUTOS

WHERE PRECO IS NULL

Colocando como condição da cláusula WHERE a expressão <CAMPO> IS NULL, serão localizados todos os registros onde o campo especificado tenha valor nulo. Lembre-se, conforme foi visto antes, que NULO é diferente de BRANCOS ou de ZEROS, representa a ausência de qualquer valor.

Selecionando registros com valores não nulos

É bastante parecido com o exemplo anterior. A diferença é que o operador lógico NOT será inserido antes do valor NULL.

SELECT * FROM FORNECEDORES

WHERE CIDADE IS NOT NULL

Selecionando apenas um registro

Como visto até aqui, o comando SELECT gera um conjunto de registros que poderá ser processado da melhor maneira pelo programa. Porém pode existir o caso em que apenas um registro nos interessará.

SELECT DISTINCT * FROM FORNECEDORES

WHERE CODIGO = 1

Codigo Razao Cidade

01 ACME & Pernalonga Associados Bauru

A cláusula DISTINCT localiza apenas o primeiro registro que satisfaça a condição estabelecida pela cláusula WHERE, ignorando quaisquer outros que possam existir.

DB2 e Linguagem SQL Página 13

Page 15: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Ordenando o conjunto resultante

Exemplo

SELECT NOME PRECO FROM PRODUTOS

WHERE PRECO > 10

ORDER BY NOME

OBSERVAÇÕES

O SELECT anterior trará todos os registros de produtos que satisfaçam a condição porém, o resultado estará em ordem alfabética de NOME;

As colunas classificadas (através da cláusula ORDER BY) devem obrigatoriamente ser referenciadas pelo SELECT;

Podemos especificar colunas para o ORDER BY fornecendo o número que indica a posição de cada uma no SELECT. A única cláusula que permite isso é a ORDER BY;

ORDER BY classifica uma tabela resultante (conjunto). Sendo assim deve ser sempre a última linha a aparecer numa instrução SELECT e deve estar sozinha.

Selecionando registros de tabelas diferentes

SELECT PRODUTOS.CODIGO, PRODUTOS.NOME, PRODUTO.FORNECEDOR

FORNECEDORES.CODIGO, FORNECEDORES.RAZAO

FROM PRODUTOS, FORNECEDORES

WHERE PRODUTOS.NOME = ‘Enxugador de gelo seco’

AND PRODUTOS.FORNECEDOR = FORNECEDORES.CODIGO

Observe que para especificar os campos que interessavam foi utilizado o formato TABELA.CAMPO. Este formato não é obrigatório a não ser que existam campos com o mesmo nome nas duas tabelas. Neste caso, não há como o SQL “saber” de qual das duas está sendo feita a seleção.

3.7. SELECT avançadoTransforma dados de uma coluna em um único valor.

Dados numéricos

SUM total dos valores da coluna

AVG média dos valores da coluna

DB2 e Linguagem SQL Página 14

Page 16: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

3.8. UPDATEAtualiza (altera) dados dos campos de uma tabela

Sintaxe:

UPDATE TABELA

SET <CAMPO 1> = <VALOR 1>

<CAMPO 2> = <VALOR 2>

. . .

<CAMPO N> = <VALOR N>

WHERE <CONDIÇÃO>

A cláusula WHERE é de suma importância. Se a mesma não for especificada juntamente com uma condição para determinar quais registros serão atualizados, todos serão, independente do valor que possuírem.

Exemplos

O exemplo a seguir grava o valor 10 no campo CODIGO da tabela PRODUTOS em todos os registros em que o CODIGO é igual a 10.

UPDATE PRODUTOS

SET CODIGO = 10

WHERE CODIGO = 1

O próximo exemplo reajusta o PRECO em 10% em todos os registros onde PRECO seja inferior a 10.

UPDATE PRODUTOS

SET PRECO = PRECO * 1.10

WHERE PRECO < 10

3.9. DELETEDeleta um ou mais registros de uma tabela. O número de registros a ser deletados é

determinado pela condição imposta na cláusula WHERE.

Sintaxe

DELETE FROM <TABELA>

WHERE <CONDIÇÃO>

Deve-se também atentar para a condição estabelecida na cláusula WHERE. Se a mesma for omitida todos os registros da tabela serão apagados.

DB2 e Linguagem SQL Página 15

Page 17: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Exemplos

Deletar todos os fornecedores de Pederneiras:

DELETE FROM <FORNECEDORES>

WHERE CIDADE = ‘PEDERNEIRAS’

Deletar todos os produtos do fornecedor 1 cujo preço seja superior a 50:

DELETE FROM <PRODUTOS>

WHERE PRECO > 50 AND FORNECEDOR = 1

Deletar todos os produtos que sejam dos fornecedores 1, 3 ou 5:

DELETE FROM PRODUTOS

WHERE FORNECEDOR IN (1 , 3 , 5)

3.10. INSERTInsere uma nova linha na tabela. O comando INSERT permite que não sejam

codificados todos os campos. Os não obrigatórios não requerem que um valor seja especificado. Se isso acontecer, o DB2 automaticamente atribuirá valor NULL para os campos. Quando o campo for do tipo DATE e o mesmo permitir a inserção de valores NULL, deverá ser especificado tal valor, do contrário o DB2 retornará SQLCODE –180 (data inválida) e a inserção será mal sucedida.

Sintaxe:

INSERT INTO <TABELA>

(CAMPO1, CAMPO2, CAMPO3, CAMPO4, ..., CAMPON)

VALUES

(VALOR1, VALOR2, VALOR3, VALOR4, ..., VALORN)

Exemplo:

Inserindo um novo registro na tabela de fornecedores

INSERT INTO FORNECEDORES

(CODIGO, RAZAO, CIDADE)

VALUES

(05, ‘Filipis’, ‘Bauru’)

Gerando uma tabela AUXILIAR com todos os registros da tabela PRODUTOS

INSERT INTO AUXILIAR

DB2 e Linguagem SQL Página 16

Page 18: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

SELECT * FROM PRODUTOS

Gerando uma tabela AUXILIAR com todos os PRODUTOS do FORNECEDOR 01:

INSERT INTO AUXILIAR

SELECT * FROM PRODUTOS

WHERE FORNECEDOR = 1

OBS Para os dois últimos exemplos, as tabelas devem ter a mesma estrutura definida.

4. O DB2 E O COBOL4.1. Linguagem Hospedeira

Os exemplos de comandos SQL vistos até aqui nos serviram para aprender a sintaxe e funcionamento da linguagem de maneira fácil. Porém, dentro do DB2 essa não é a ,maneira que utilizaremos para acessar as bases de dados. Na verdade, já vimos que o DB2 é um software que controla os acessos ao banco de dados, não uma linguagem de programação. Sendo assim, ele precisa ser acessado a partir de programas codificados em linguagens como Cobol ou CSP. Observe o esquema a seguir:

Podemos dizer que o Cobol servirá como linguagem hospedeira para o DB2 e fará todos os acessos à base de dados através de linguagem SQL.

Todos os comandos do DB2 (SQL) que serão executados dentro de um programa Cobol deverão ser precedidos da linha EXEC SQL e seguidos por END-EXEC, conforme sintaxe geral a seguir:

EXEC SQL

<COMANDOS SQL>

END-EXEC

DB2 e Linguagem SQL Página 17

Page 19: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

O programa Cobol, antes de ser compilado, passará por um Translator. Depois será executado a partir de um utilitário DB2, em JCL1 próprio.

Para que tudo isso funcione e que a linguagem Cobol possa atuar como hospedeira para o DB2, precisaremos de alguns elementos que possibilitem essa comunicação. Esses elementos são a SQLCA e as variáveis host.

4.2. SQLCASQLCA é o nome dado à área de comunicação entre o programa e o DB2. O layout

dessa área precisa ser copiado para o programa, bastando para tanto, incluir na WORKING-STORAGE SECTION o comando:

EXEC SQL

INCLUDE SQLCA

END-EXEC

O comando INCLUDE é utilizado para copiar no programa books de registros do DB2. Pode ser utilizado tanto para a SQLCA, como para registros de tabelas, catalogadas através do utilitário DCLGEN.

A SQLCA também disponibiliza um recurso muito importante chamado SQLCODE, um campo que contém o código de retorno dos acessos efetuados e deverá sempre ser testado após a execução de cada EXEC SQL codificada na PROCEDURE DIVISION. Entenda este código de retorno como sendo a File Status do DB2.

4.3. Variáveis HostSão variáveis criadas para fazer a permuta de valores entre o DB2 (SQL) e a

linguagem de programação utilizada como hospedeira, no nosso caso o Cobol.

Podem ser definidas normalmente na WORKING-STORAGE SECTION do programa seguindo as correspondências de tipos de dados que são apresentadas no início dessa apostila, mas o DB2 oferece um utilitário para facilitar a definição das hosts. O DCLGEN pode gerar descrições em Cobol para os campos das tabelas. As definições são geradas em books que podem depois ser copiados através do INCLUDE. Criar as definições manualmente pelo programa pode ser vantagem, uma vez que tabelas diferentes podem conter nomes iguais e, neste caso, o programador poderá diferenciar os nomes das variáveis.

Sempre que um comando SQL se referenciar a uma variável host, está deverá ter seu nome precedido por dois pontos (:).

Exemplo

MOVE 2904 TO CH-CLI.

1 Job Control Language, é a linguagem que controla a execução de todas as tarefas no mainframe. Neste caso, não faremos uso da linguagem nativa, mas sim de uma implementada pelo próprio DB2.DB2 e Linguagem SQL Página 18

Page 20: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

EXEC SQL

SELECT CODIGO, NOME, TELEFONE

FROM CLIENTES

WHERE CODIGO = :CH-CLI

4.4. SQLCODEComo visto anteriormente é o código de retorno da execução de comandos SQL.

Possui quatro posições no formato:

S 9 9 9

Podemos dizer que existem três tipos de SQLCODE, conforme segue:

SQLCODE negativo aconteceu um erro grave ou de hardware no acesso. Pode exigir o cancelamento do programa.

SQLCODE zero a operação foi concluída com sucesso.

SQLCODE positivo indica warnings (avisos) que podem gerar um caminho diferente a ser executado pelo programa sem que haja necessariamente cancelamento.

Principais códigos de retorno do SQL

Código Descrição

-180 Data inválida

-803 Chave duplicada

-922 Falta de autorização

ZEROS Comando concluído com êxito

+100 Chave não encontrada ou

Fim da query de múltiplas linhas ou

Fim do arquivo (tabela)

4.5. Trabalhando com conjunto de registros4.5.1. Cursor

Suponha a seguinte situação: tem-se uma tabela com 50.000 registros; um programa deverá realizar uma atualização em todos os registros dessa tabela que satisfaçam a uma determinada condição qualquer.

DB2 e Linguagem SQL Página 19

Page 21: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

5. EXERCÍCIOSExercício 1

É dada a tabela PRODUTOS com a seguinte estrutura:

CODPROD DECIMAL (2)

NOME CHAR (30)

TIPO DECIMAL (1)

EMBALAGEM CHAR (10)

ALIQUOTA DECIMAL (2)

VALIDADE DATE

PRECO DECIMAL (7,2)

a) Inserir um registro com os dados que quiser

b) Alterar o tipo de todos os produtos de 5 para 9

c) Aumentar em duas unidades o valor da alíquota

d) Excluir todos os registros com produto vencido. Suponha a data atual igual a 1998-06-16

e) Atualize o preço em 23.71% em todos os registros

f) Calcule o preço utilizando a alíquota como base. Fórmula: preço = preço + alíquota %

g) Exclua todos os produtos que custem menos de R$ 10 e sejam embalados em caixa

h) Suponha uma tabela de nome PROD-AUX de estrutura identica a tabela PRODUTOS.

h.1) copie todos os registros de produtos para ela

h.2) copie os registros de produtos vencidos para ela

h.3) todos os produtos com preço entre 200 e 950

Exercício 2

Utilizando a tabela PRODUTOS do exercício anterior, codificar um programa COBOL/SQL que faça a inclusão de um registro nesta tabela.

OBS:

1 – Acessar os valores via console

2 – Codificar as variáveis HOST na WORKING

3 – Carregar a SQLCA

DB2 e Linguagem SQL Página 20

Page 22: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

4 – Testar SQLCODE.

Exercício 3

Ainda utilizando a tabela PRODUTOS, codifique um programa para acessar via console um código de produto, consistindo conforme seu tamanho. Procurar por esse código na tabela exibindo os demais dados do produto.

Exercício 4

São dadas as tabelas PEDIDOS e COMPOSIÇÃO conforme segue:

PEDIDOS:

NUMPED DECIMAL (7)

DATAPED DATE

QTDEPED DECIMAL (3)

VLTOTPED DECIMAL (8,2)

COMPOSICAO:

NUMPED DECIMAL (7)

SEQ DECIMAL (1)

CODPROD DECIMAL (4)

PRECOPROD DECIMAL (8,2)

Codificar em linguagem SQL as seguintes querys (consultas):

a) da tabela PEDIDOS, o pedido de número 100

b) os pedidos com mais de 3 produtos

c) selecionar os registros onde a quantidade de produtos seja superior a 10 e o valor total esteja entre 200 e 600, inclusive.

d) Todos os pedidos, cada qual com sua respectiva composição

e) Todos os registros da composição onde o preço do produto seja superior a 50 e com a respectiva data e valor total do pedido

f) Todos os pedidos que possuam 4, 6 ou 10 produtos com preço de cada produto

g) Todos os pedidos do mês de maio

h) O segundo produto do pedido número 2048

i) Os pedidos com problemas (não possuem composição correspondente)

DB2 e Linguagem SQL Página 21

Page 23: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

Exercício 5

CODIGO DECIMAL (4)

NOME CHAR (30)

ENDERECO CHAR (50)

STATUS CHAR (1)

LIMITE DECIMAL (2)

a) Codifique um programa para adicionar 10% ao limite dos clientes cujo status seja igual a “E” (Especial).

b) Codifique um programa para excluir da tabela todos os clientes que tenham limite inferior a 500 e status igual a “I” (Inadimplente)

Obs: - Usar cursor para os dois programas

- imprimir o relatório dos registros processados a medida que o processamento (deleção ou atualização) é efetuado

- exibir estatística de processamento ao final.

Exercício 6

É dada a tabela VENDAS com a estrutura abaixo relacionada:

NUM_PEDIDO DECIMAL(5)

DATA_VENDA DATE

NUM_NF DECIMAL(7)

VALOR_PEDIDO DECIMAL(8,2)

SITUACAO CHAR(1) (A = ATIVO ou C = CANCELADO ou R=REAJUSTADO)

1 – São dadas as tabelas ATIVOS e CANCELADOS de estrutura idêntica (inclusive nos nomes dos campos) à tabela VENDAS. Codifique um programa batch seguindo os procedimentos abaixo discriminados:

Ler toda a tabela VENDAS, armazenando-a em um cursor.

Processar este cursor da primeira a última linha, gravando as tabelas ATIVOS e CANCELADOS, utilizando para tanto o campo SITUACAO.

Ao final, imprimir estatística de processamento:

TOTAL DE REGISTROS LIDOS: Z.ZZZ.ZZ9

TOTAL DE REGISTROS ATIVOS: Z.ZZZ.ZZ9

TOTAL DE REGISTROS CANCELADOS: ZZ.ZZZ.ZZ9

2 – Na tabela VENDAS, onde o campo STATUS determine que um registro precisa ser reajustado, atualize em 2,37% o valor total do pedido.

DB2 e Linguagem SQL Página 22

Page 24: Apostila de DB2 - Maceiras Sistemas – Tudo em Tecnologia, … …  · Web view · 2016-06-13... agrupadas por linhas. De dentro do nosso programa ... -STORAGE SECTION do programa

3 – É dada a tabela RESUMO, com estrutura descrita abaixo:

DATA_VENDA DATE

SITUACAO CHAR(1)

VALOR_TOTAL DECIMAL(16, 2)

Codificar um programa, seguindo as instruções:

Classificar a tabela VENDAS por DATA_VENDA e SITUACAO.

Gerar a tabela RESUMO, onde cada data de venda será representada em dois registros. O primeiro com o valor total de vendas canceladas no dia e o segundo com o total de vendas ativas no dia..

Ao final, exibir estatísticas de processamento:

NÚMERO DE REGISTROS LIDOS: ZZ.ZZZ.ZZ9

NÚMERO DE REGISTROS GRAVADOS: ZZ.ZZZ.ZZ9

NÚMERO DE REGISTROS CANCELADOS: ZZ.ZZZ.ZZ9

NÚMERO DE REGISTROS ATIVOS: ZZ.ZZZ.ZZ9

VALOR TOTAL CANCELADO: ZZ.ZZZ.ZZ9

VALOR TOTAL ATIVO: R$ ZZ.ZZZ.ZZ9,99

DIFERENÇA CANCELADO/ATIVO: R$ ZZ.ZZZ.ZZ9,99

DB2 e Linguagem SQL Página 23