Trabalho de Base de Dados II

10

Click here to load reader

description

1º trabalho individual de Base de dados II

Transcript of Trabalho de Base de Dados II

Page 1: Trabalho de Base de Dados II

Instituto Politécnico de Castelo Branco | Tecnologias de Informação e Multimédia

Escola Superior de Tecnologia

Base de Dados II 2008/09

Relatório Trabalho Individual I

Autores: 20060179 Luciano Valinho [email protected]

Page 2: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 2 -

Índice

1. Criar uma estrutura de dados (isbn:int,titulo:varchar2(30), ano:int) 3 2. Inserir 3 Registos à escolha 4 3. Bloco de pl/sql que permite receber um valor de entrada e listar o restante tuplo

5

4. Alterar a coluna titulo para “varchar2(50) 6 5. Executar novamente o bloco de pl/sql criado 7 6. Actualizar o bloco de pl/sql recorrendo ao uso do %TYPE ou %ROWTYPE

8

7. Conclusão 10

Page 3: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 3 -

1. Criar uma estrutura de dados (isbn:int,titulo:varchar2(30), ano:int)

Código: CREATE TABLE Livros (

isbn INTEGER,

titulo varchar2(30),

ano INTEGER,

PRIMARY KEY (isbn) );

Foi criada uma tabela com três campos, sendo o campo isbn chave primária, de maneira a que não

haja livros repetidos na estrutura...

Page 4: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 4 -

2. Inserir 3 registos à escolha

Código: INSERT INTO Livros (isbn, titulo, ano)

VALUES (1, 'Perder Peso', 2007);

INSERT INTO Livros (isbn, titulo, ano)

VALUES (2, 'Como ganhar dinheiro fácil', 2008);

INSERT INTO Livros (isbn, titulo, ano)

VALUES (3, 'Fugir ao Fisco', 2006);

É inserido na tabela Livros 3 linhas com a informação do isbn, titulo e ano do livro respectivo.

Page 5: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 5 -

3. Bloco de pl/sql que permite receber um valor de entrada e listar o restante tuplo

Código:

Declare

find_livro_id int :=2;

titulo_livro varchar2(30);

ano_livro int;

Begin

select titulo, ano into titulo_livro, ano_livro from Livros where

Livros.isbn = find_livro_id;

dbms_output.put_line('ID do livro: '||find_livro_id);

dbms_output.put_line('Título do Livro: '||titulo_livro);

dbms_output.put_line('Ano do Livro: '||ano_livro);

end;

A variável find_livro_id, vai receber o valor que vai permitir a procura do tuplo. Na query é feita a

cláusula WHERE para encontrar o tuplo pretendido. Por fim, é mostrado o resultado.

Page 6: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 6 -

4. Alterar a coluna titulo para “varchar2(50)

Código: alter table Livros modify titulo varchar(50);

Este código permitiu alterar o campo titulo da tabela Livros de maneira a que possa ser possível

introduzir 50 caracteres em vez dos 30 anteriores.

Page 7: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 7 -

5. Executar novamente o bloco de pl/sql

Ao executar o bloco de código, este não fez nada. Mas visto que era suposto acontecer qualquer

coisa deduzi que se houvesse um tuplo que contivesse o titulo superior a 30 caracteres um erro

deveria acontecer:

Sendo assim acrescentei um novo tuplo:

Código: Insert into Livros (isbn, titulo, ano)

VALUES (4, 'livro sobre um titulo grande, vá...mais ou menos',

2008);

De seguida executei o código criado anteriormente com uma ligeira diferença, mudei a variável

“find_livro_id” para 4 , para ser encontrado o tuplo que criei anteriormente e deu o seguinte erro:

Erro: ERRO na linha 1: ORA-06502: PL/SQL: erro numérico ou de valor : o buffer da cadeia de caracteres é demasiado pequeno ORA-06512: na linha 9

Este erro acontece, visto que a variável titulo_livro continua a ter 30 caracteres no máximo, e o

pedido à base de dados foi de um campo que continha mais de 30 caracteres.

Page 8: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 8 -

6. Actualizar o bloco de pl/sql recorrendo ao uso do %TYPE ou %ROWTYPE

Uso do %TYPE

Código:

Declare

find_livro_id Livros.isbn%TYPE :=4;

titulo_livro Livros.titulo%TYPE;

ano_livro Livros.titulo%TYPE;

Begin

select titulo, ano into titulo_livro, ano_livro from Livros where

Livros.isbn = find_livro_id;

dbms_output.put_line('ID do livro: '||find_livro_id);

dbms_output.put_line('Título do Livro: '||titulo_livro);

dbms_output.put_line('Ano do Livro: '||ano_livro);

end;

O uso do TYPE permite declarar uma variável do mesmo tipo que uma coluna que pretendemos da tabela.

Page 9: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 9 -

Uso do %ROWTYPE

Código:

Declare

find_livro_id Livros.isbn%TYPE :=4;

linha Livros%ROWTYPE;

Begin

select * into linha from Livros where Livros.isbn = find_livro_id;

dbms_output.put_line('ID do livro: '||linha.isbn);

dbms_output.put_line('Título do Livro: '||linha.titulo);

dbms_output.put_line('Ano do Livro: '||linha.ano);

end;

O uso do %ROWTYPE permite guardar todo um tuplo numa variável, sendo possível aceder também a um campo concreto desse tuplo.

Page 10: Trabalho de Base de Dados II

Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia

- 10 -

7. Conclusão Este pequeno exercício permitiu-me compreender melhor a utilização dos blocos pl/sql, mas especialmente fiquei com uma noção boa da utilização do %TYPE e do %ROWTYPE. Com o uso do %ROWTYPE é possível poupar-nos a declaração de algumas variáveis, e assim o “compilador” tem menos código a interpretar. O uso do %TYPE também tem as suas vantagens visto que podemos declarar uma variável sem saber o tipo de dados em concreto que esta deve conter. Dependendo de situação para situação, tanto o %ROWTYPE e o %TYPE podem ser bastante úteis.