• Nenhum resultado encontrado

modificações no_banco_de

No documento Banco de Dados - Princípios e Prática (páginas 148-159)

No capítulo anterior,

abordamos de diversas formas como extrair informações de tabelas existentes em um banco de dados mediante consultas com comandos SQL. Esse é um processo,

agora, para inserir registros, excluir registros ou alterar os

dados existentes em um registro, é preciso utilizar outra série de

comandos DML. A seguir veremos em detalhes a sintaxe para

cada uma dessas modi- ficações a serem feitas, as quais sejam:

inclusão (comando INSERT),

altera ção (comando UPDATE) ou

exclusão (comando DELETE).

[

inserção de registros

]

Para inserir um novo registro em uma tabela, utilizamos o comando

INSERT, cuja sintaxe genérica é:

INSERT INTO <tabela> (<campo1>, <campo2 >,..., <campon >) VALUES (<valor1>, <valor2>,... <valorn>))

Onde: <

_ tabela> é o nome da tabela escolhida para inclusão de dados; <

_ campo1>, <campo2>,..., <campon > são os campos da tabela onde serão incluídos dados;

<

_ valor1>, <valor2>,... <valorn > são os valores que serão incluídos nos campos respectivos.

Por exemplo, vamos supor que desejemos incluir mais um campo na tabela “Pedido” trabalhada nos exemplo de consulta do capítulo ante- rior. Assim:

SQL (68):

INSERT INTO pedido(codigo, codcli, data, valor) VALUES(1028, 202, DATE’01/04/2004’, 600,00)

Portanto o tipo de dado do campo em questão deve ser considerado para o valor a ser incluído, senão o SGBD irá emitir um erro. Quando queremos incluir dados em todos os campos, podemos omitir a descri- ção dos mesmos no comando INSERT:

SQL (69):

INSERT INTO pedido

VALUES(1028, 202, DATE’01/04/2004’, 600,00)

A inclusão de dados em um registro não precisa contemplar, necessa- riamente, todos os campos. Caso queiramos incluir apenas o código do pedido e do cliente, o comando pode ser dado da seguinte maneira:

SQL (70):

INSERT INTO pedido(codigo, codcli) VALUES(1028, 202)

Na tabela, um registro é incluído com os dados de código do pedido e código do cliente. O campo data e valor assumem o valor NULL.

PEDIDO

codigo codcli data valor

1005 202 10/03/2004 1.200,00 1008 221 13/03/2004 960,00 1010 233 17/03/2004 1.020,00 1015 282 20/03/2004 755,00 1023 202 21/03/2004 900,00 1028 202 NULL NULL

149

A inclusão de registros deve respeitar as restrições definidas para a tabela em questão. Se um campo for definido para não aceitar valores nulos, a inclusão resulta em erro. Campos que são definidos como cha- ves não tem condições de assumir o valor NULL, e, assim, obrigatoria- mente devem ter um valor expresso num comando de inserção. Como um atributo chave deve ser unívoco, a inserção de um registro com um campo chave que já exista também irá gerar um erro de inclusão. A maioria dos SGBD’s existentes no mercado implementa o tipo de dado autonumeração para codificar os registros automaticamente a cada inserção. Assim, num comando INSERT, não é necessário incluir tal campo especificando um valor, pois isso é feito automaticamente, exi- mindo o controle da codificação por parte do aplicativo.

O comando INSERT permite também a inclusão em lote a partir de uma consulta SELECT. Vamos supor que queiramos incluir os fornecedores localizados no estado do Paraná como clientes. Nessa situação, faze- mos essas inclusões aninhando os comandos:

SQL (71):

INSERT INTO clientes(codigo, nome) SELECT codigo, nome

FROM fornecedores WHERE UF=’PR’

[

alteração de registros

]

Para alterar um valor em um campo específico de uma ou mais tabelas, utilizamos o comando UPDATE. A sintaxe genérica é:

UPDATE <tabelas>

SET <campo1>=<valor1>, <campo2 >=<valor2>,..., <campon >=<valorn> WHERE <condição>

Onde na cláusula SET o campo respectivo de “<tabelas>” assume um novo valor caso a condição na cláusula WHERE seja verdadeira.

Por exemplo, para alterar o valor do pedido 1023 para R$1.000,00, o comando é:

SQL (72):

UPDATE pedido SET valor = 1.000,00 WHERE codigo = 1023

Após a execução do comando, o valor atual de R$900,00 será sobre- posto pelo novo valor de R$1.000.00.

A cláusula WHERE é opcional, porém na maioria dos casos é necessá- rio utilizá-la. Caso a atualização deva ser feita para todos os registros, basta utilizar o comando UPDATE sem a cláusula WHERE, e o comando seguinte zera todos os valores da tabela “Pedido” por exemplo:

SQL (73):

UPDATE pedido SET valor = 0,00

O uso de condições utilizando as consultas aninhadas SELECT tam- bém é possível. Desse modo, caso queiramos zerar o limite de com- pra de clientes que tenham ultrapassado a mesma, podemos utilizar o seguinte comando SQL:

SQL (74):

UPDATE clientes SET limite_compra = 0 WHERE EXISTS

(SELECT * FROM pedido

WHERE pedido.valor > clientes.limite_compra AND pedido.codcli = clientes.codigo)

Ou seja, o limite de compra é igual a zero para aqueles clientes nos quais o valor de um pedido tenha extrapolado o limite de compra. Como resultado, o cliente 282 tem o limite de compra zerado e a tabela

151

“Clientes” fica com a seguinte apresentação:

CLIENTES

codigo nome telefone limite_compra

202 Ernesto 3222-0809 1.500,00

221 Amélia 3233-2474 2.000,00

233 Luís Alberto 3323-0071 1.500,00

282 José Antonio 3343-9021 0,00

295 Carlos Silva 3224-5678 800,00

Podemos utilizar mais de uma tabela para fazer uma atualização. Por exemplo, o comando que apresentamos na seqüência irá atualizar os valores dos pedidos a partir dos respectivos subtotais existentes nos itens da tabela “Pedido”. Desde que o valor do pedido seja zerado com antecedência, o seguinte comando pode ser fornecido logo após:

SQL (75):

UPDATE pedido, itens

SET pedido.valor = pedido.valor + itens.subtotal WHERE pedido.codigo = itens.codped

Note que são utilizadas as duas tabelas “Pedido” e “Itens”, tal como num produto cartesiano em uma consulta SQL. Nesse caso, o valor do pedido é incrementado dos valores dos subtotais respeitando que o código do pedido seja igual ao campo codped da tabela “Itens”.

[

exclusão de registros

]

A sintaxe SQL para exclusão de registros é a seguinte:

DELETE FROM <tabela> WHERE <condição>

Como exemplo, para excluir o registro da tabela “Pedido” de código 1028, fazemos:

SQL (76):

DELETE FROM pedido WHERE codigo = 1028

A cláusula WHERE, assim como no comando UPDATE, é opcional. No entanto, quando não utilizada, exclui todos os registros de uma tabela. Assim, o comando:

SQL (77):

DELETE FROM pedido

Apaga todos os registros existentes na tabela. Trata-se, portanto, de um comando que não deixa dúvidas quanto ao cuidado necessário na sua utilização.

[

resumo

]

Foi visto neste capítulo como fazer modificações em tabelas dentro de bancos de dados. Observamos que os comandos INSERT e DELETE têm atuação sobre registros no banco de dados, enquanto que o comando

UPDATE atua sobre um item de registro. Vimos, também, que as modifi-

cações podem conflitar com as restrições adotadas para que uma deter- minada tabela mantenha a sua integridade. Assim, para estendermos a nossa compreensão do assunto, veremos na seqüência a criação de uma tabela na qual serão definidos, além dos campos e seus tipos, as restri- ções a serem respeitadas no caso de modificações em banco de dados.

[

exercícios

]

1. Com base nas tabelas a seguir, expresse os coman- dos de inserção, modificação ou exclusão na lingua- gem SQL.

153

PEDIDO

codigo codcli data valor

0001 100 03/10/2003 133,00 0002 102 04/10/2003 45,00 0003 105 05/11/2003 339,50 0004 110 10/11/2003 30,00 0005 100 12/11/2003 152,50 CLIENTE

codigo nome telefone cidade UF

100 Luís Paulo 3355-1027 Curitiba PR

102 José Antonio 3452-3528 Lapa PR

105 Carlos Lima 3233-3456 Joinville SC

110 Maria de Castro 3441-8930 Ponta Grossa PR

114 Danilo Silva 3353-4020 Curitiba PR

ITENS

codped coditem qtdped subtotal

0001 2010 3 108,00 0001 2020 10 25,00 0002 3004 30 45,00 0003 4011 2 50,00 0003 4013 5 137,50 0003 4025 4 152,00 0004 3004 20 30,00 0005 3004 10 15,00 0005 4013 5 137,50 FORNECEDOR

codigo nome telefone cidade UF

501 ABC Cirúrgica 3772-4001 São Paulo SP 502 Thermo 3873-5030 Salvador BA 535 Distrib. Silva 3444-5523 Joinville SC 550 CLS 3352-2353 Curitiba PR

ESTOQUE

codigo descrição un preço qtd estmin ptoped codfor

2000 Termômetro un 12,00 36 5 15 501 2010 Termômetro Digital un 36,00 12 5 15 501 2020 Compressa Cirúrgica Pct c/10 2,50 40 10 50 535 3004 Esparadrapo Rl c/10m 1,50 130 20 100 535 4011 Agulha Desc. 10mmx1mm Cx. c/ 100 un 25,00 43 15 60 550 4013 Agulha Desc. 12mmx2mm Cx. c/ 100 un 27,50 43 15 60 550 4025 Agulha Desc. 15mmx1mm Cx. c/ 100 un 38,00 43 15 60 550 5001 Ap.Pressão un 205,00 6 1 5 590

a. Inclua o cliente João Carlos, que mora em Forta- leza-CE, com telefone 3344-0909, no código 115. b. Inclua a cliente Ana Flávia, com telefone 2454-8008.

c. Altere o telefone do cliente Carlos Lima para 3233-3457.

d. Altere a cidade, UF e telefone de Maria de Castro para Londrina, PR e 3455-3321, respectivamente.

e. Exclua o cliente José Antônio.

f. Acrescente o item “Aparelho de Pressão” ao pedido 0005.

155

h. Altere o preço do item 2010 para R$105,00 (apenas no pedido).

i. Altere a quantidade do item 4011 do pedido 0003 para 3.

j. Zere todos os valores de ponto de pedido da tabela “Estoque”.

k. Exclua os itens de pedido abaixo de R$100,00.

l. Exclua todos os registros da tabela “Fornecedor”.

referências

No documento Banco de Dados - Princípios e Prática (páginas 148-159)

Documentos relacionados