Trabalho de Base de Dados II
Click here to load reader
-
Upload
luciano-valinho -
Category
Documents
-
view
1.560 -
download
0
description
Transcript of 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]
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
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...
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.
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.
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.
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.
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.
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.
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.