PL / SQL - Registros
Neste capítulo, discutiremos Registros em PL / SQL. UMArecordé uma estrutura de dados que pode conter itens de dados de diferentes tipos. Os registros consistem em campos diferentes, semelhantes a uma linha de uma tabela de banco de dados.
Por exemplo, você deseja manter o controle de seus livros em uma biblioteca. Você pode querer rastrear os seguintes atributos sobre cada livro, como Título, Autor, Assunto, ID do Livro. Um registro contendo um campo para cada um desses itens permite tratar um LIVRO como uma unidade lógica e permite organizar e representar melhor suas informações.
PL / SQL pode lidar com os seguintes tipos de registros -
- Table-based
- Registros baseados em cursor
- Registros definidos pelo usuário
Registros baseados em tabela
O atributo% ROWTYPE permite que um programador crie table-based e cursorbased registros.
O exemplo a seguir ilustra o conceito de table-basedregistros. Estaremos usando a tabela CLIENTES que criamos e usamos nos capítulos anteriores -
DECLARE
customer_rec customers%rowtype;
BEGIN
SELECT * into customer_rec
FROM customers
WHERE id = 5;
dbms_output.put_line('Customer ID: ' || customer_rec.id);
dbms_output.put_line('Customer Name: ' || customer_rec.name);
dbms_output.put_line('Customer Address: ' || customer_rec.address);
dbms_output.put_line('Customer Salary: ' || customer_rec.salary);
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Customer ID: 5
Customer Name: Hardik
Customer Address: Bhopal
Customer Salary: 9000
PL/SQL procedure successfully completed.
Registros baseados em cursor
O exemplo a seguir ilustra o conceito de cursor-basedregistros. Estaremos usando a tabela CLIENTES que criamos e usamos nos capítulos anteriores -
DECLARE
CURSOR customer_cur is
SELECT id, name, address
FROM customers;
customer_rec customer_cur%rowtype;
BEGIN
OPEN customer_cur;
LOOP
FETCH customer_cur into customer_rec;
EXIT WHEN customer_cur%notfound;
DBMS_OUTPUT.put_line(customer_rec.id || ' ' || customer_rec.name);
END LOOP;
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
1 Ramesh
2 Khilan
3 kaushik
4 Chaitali
5 Hardik
6 Komal
PL/SQL procedure successfully completed.
Registros definidos pelo usuário
PL / SQL fornece um tipo de registro definido pelo usuário que permite definir as diferentes estruturas de registro. Esses registros consistem em campos diferentes. Suponha que você queira manter o controle de seus livros em uma biblioteca. Você pode querer rastrear os seguintes atributos sobre cada livro -
- Title
- Author
- Subject
- ID do livro
Definindo um Registro
O tipo de registro é definido como -
TYPE
type_name IS RECORD
( field_name1 datatype1 [NOT NULL] [:= DEFAULT EXPRESSION],
field_name2 datatype2 [NOT NULL] [:= DEFAULT EXPRESSION],
...
field_nameN datatypeN [NOT NULL] [:= DEFAULT EXPRESSION);
record-name type_name;
O registro do livro é declarado da seguinte maneira -
DECLARE
TYPE books IS RECORD
(title varchar(50),
author varchar(50),
subject varchar(100),
book_id number);
book1 books;
book2 books;
Acessando Campos
Para acessar qualquer campo de um registro, usamos o ponto (.)operador. O operador de acesso de membro é codificado como um período entre o nome da variável de registro e o campo que desejamos acessar. A seguir está um exemplo para explicar o uso do registro -
DECLARE
type books is record
(title varchar(50),
author varchar(50),
subject varchar(100),
book_id number);
book1 books;
book2 books;
BEGIN
-- Book 1 specification
book1.title := 'C Programming';
book1.author := 'Nuha Ali ';
book1.subject := 'C Programming Tutorial';
book1.book_id := 6495407;
-- Book 2 specification
book2.title := 'Telecom Billing';
book2.author := 'Zara Ali';
book2.subject := 'Telecom Billing Tutorial';
book2.book_id := 6495700;
-- Print book 1 record
dbms_output.put_line('Book 1 title : '|| book1.title);
dbms_output.put_line('Book 1 author : '|| book1.author);
dbms_output.put_line('Book 1 subject : '|| book1.subject);
dbms_output.put_line('Book 1 book_id : ' || book1.book_id);
-- Print book 2 record
dbms_output.put_line('Book 2 title : '|| book2.title);
dbms_output.put_line('Book 2 author : '|| book2.author);
dbms_output.put_line('Book 2 subject : '|| book2.subject);
dbms_output.put_line('Book 2 book_id : '|| book2.book_id);
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
PL/SQL procedure successfully completed.
Registros como parâmetros de subprograma
Você pode passar um registro como um parâmetro de subprograma da mesma forma que passa qualquer outra variável. Você também pode acessar os campos de registro da mesma forma que acessou no exemplo acima -
DECLARE
type books is record
(title varchar(50),
author varchar(50),
subject varchar(100),
book_id number);
book1 books;
book2 books;
PROCEDURE printbook (book books) IS
BEGIN
dbms_output.put_line ('Book title : ' || book.title);
dbms_output.put_line('Book author : ' || book.author);
dbms_output.put_line( 'Book subject : ' || book.subject);
dbms_output.put_line( 'Book book_id : ' || book.book_id);
END;
BEGIN
-- Book 1 specification
book1.title := 'C Programming';
book1.author := 'Nuha Ali ';
book1.subject := 'C Programming Tutorial';
book1.book_id := 6495407;
-- Book 2 specification
book2.title := 'Telecom Billing';
book2.author := 'Zara Ali';
book2.subject := 'Telecom Billing Tutorial';
book2.book_id := 6495700;
-- Use procedure to print book info
printbook(book1);
printbook(book2);
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700
PL/SQL procedure successfully completed.