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
Índice 1. Criar uma estrutura de dados (isbn:int,titulo:varchar2(30), ano:int) 2. Inserir 3 Registos à escolha 3. Bloco de pl/sql que permite receber um valor de entrada e listar o restante tuplo 4. Alterar a coluna titulo para “varchar2(50) 5. Executar novamente o bloco de pl/sql criado 6. Actualizar o bloco de pl/sql recorrendo ao uso do %TYPE ou %ROWTYPE 7. Conclusão
-2-
3 4 5 6 7 8 10
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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...
-3-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
2. Inserir 3 registos à escolha
Código: INSERT VALUES INSERT VALUES INSERT VALUES
INTO Livros (isbn, titulo, ano) (1, 'Perder Peso', 2007); INTO Livros (isbn, titulo, ano) (2, 'Como ganhar dinheiro fácil', 2008); INTO Livros (isbn, titulo, ano) (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
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.
-5-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
-6-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
-7-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
-8-
Base de Dados II | Trabalho Individual I | Luciano Valinho | Tecnologias de Informação e Multimédia
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.
-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 -