Trabalho de Base de Dados II
Trabalho de Base de Dados II
Trabalho de Base de Dados II
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
Í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 5
restante tuplo
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 8
%ROWTYPE
7. Conclusão 10
-2-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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...
-3-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
-4-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
Código:
Declare
Begin
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.
-5-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
-6-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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:
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.
-7-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
Uso do %TYPE
Código:
Declare
Begin
select titulo, ano into titulo_livro, ano_livro from Livros where
Livros.isbn = find_livro_id;
end;
O uso do TYPE permite declarar uma variável do mesmo tipo que uma coluna que
pretendemos da tabela.
-8-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
Uso do %ROWTYPE
Código:
Declare
Begin
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.
-9-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
- 10 -