آموزش PL/SQL قسمت دهم – رکورد در PL/SQL

در این قسمت رکورد (RECORD) در PL/SQL و روش استفاده از آن را توضیح می دهیم. رکورد یک ساختمان داده است که آیتم های متفاوت را کنار هم نگه می دارد. یعنی بر خلاف آرایه، این آیتم ها نوع داده متفاوت دارند. به همین جهت، هر سطر از جدول را یک رکورد می نامند زیرا معمولا سطرها از ستون های با نوع داده متفاوت تشکیل شده اند.

برای مثال می خواهیم اطلاعات کتاب های یک کتابخانه را بررسی کنیم. برای این کتاب ها مشخصات مختلف از جمله عنوان، نام نویسنده، موضوع کتاب و شماره کتاب وجود دارد. بنابراین برای آن ها یک رکورد با فیلدهای مورد نیاز تعریف می کنیم و اطلاعات مورد نظر را به شیوه بهتر دسته بندی کرده و نمایش می دهیم.

در PL/SQL می توان رکورد را به سه روش زیر تعریف کرد که در ادامه توضیح می دهیم.

1.روش Table-Based

در روش Table-Based از ویژگی ROWTYPE% استفاده می شود و رکورد معادل با ستون ها و نوع داده آنها در یک جدول ساخته می شود. برای دسترسی به محتویات رکورد نیز از علامت نقطه ( . ) استفاده می شود.

مثال:

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;

/

خروجی:

Customer ID: 5

Customer Name: Hardik

Customer Address: Bhopal

Customer Salary: 9000

PL/SQL procedure successfully completed.

 

2.روش Cursor-Based

همانند روش اول در تعریف یک رکورد از ویژگی ROWTYPE% استفاده می شود ولی ستون ها و نوع داده آنها معادل با یک CURSOR تعریف می شود. با استفاده از CURSOR می توان به رکوردهای مختلف دسترسی داشته باشیم.

مثال:

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;

/

خروجی:

1 Ramesh

2 Khilan

3 kaushik

4 Chaitali

5 Hardik

6 Komal

PL/SQL procedure successfully completed.

 

3.روش User-Defined

در این روش کاربر می تواند یک رکورد با فیلدها و نوع داده دلخواه تعریف کند. در ادامه سینتکس تعریف رکورد به این روش را می بینید:

 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;

مثال 1: تعریف رکورد برای دو کتاب

DECLARE

TYPE books IS RECORD

(title varchar(50),

author varchar(50),

subject varchar(100),

book_id number);

book1 books;

book2 books;

مثال 2: ثبت و نمایش اطلاعات دو کتاب در رکورد

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;

/

خروجی:

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.

 

ارسال رکورد به عنوان پارامتر

می توان یک رکورد را همانند متغیر به زیربرنامه ها ارسال نمود و در داخل آن زیربرنامه به فیلدهای آن رکورد دسترسی یافت.

مثال:

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;

/

خروجی:

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.

 

Comment (1)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.