Vous êtes sur la page 1sur 10

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 lcx@est.ipcb.pt
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

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 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

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 -

Vous aimerez peut-être aussi