آموزش Record ها

🔶 records (record & % rowtype)

در ادامه مباحث مطرح شده با موضوع PL/SQL در این بخش به معرفی نوع های داده ای ترکیبی (composit data type) ها میپردازم
و در این بخش به معرفی record و در بخش بعد به معرفی collection خواهم پرداخت

نوع داده ای ترکیبی چیست و چه کاربردی دارد ؟
✅میتوان گفت که نوع داده ای ترکیبی از کنار هم قرار دادن یک یا چند نوع داده ای شمارش پذیر (scalar data type ) ها مانند date ، number ، varchar2 ایجاد میشود که به منظور تعریف یک ساختار جهت نگهداری داده های مرتبط با هم تعریف میشود ، در واقع انواع داده ای ترکیبی شبیه به ساختار های داده ای زبان های برنامه نویسی مانند class یا structure میباشند

چند نوع داده ای ترکیبی در PL/SQL وجود دارد ؟
✅دو نوع داده ای ترکیبی در PL/SQL وجود دارد که شامل

1️⃣  record
➡️ user-defined record
➡️ % rowtype

2️⃣ collection
➡️index by table
➡️ nested table
➡️ varray

در چه مواقعی باید از record و در چه مواقعی باید از collection استفاده کنیم ؟
✅ هرگاه نیاز داشتیم تا از نوع داده ای ترکیبی برای نگهداری یک سطر داده استفاده کنیم میتوانیم از record استفاده کنیم
✅ هرگاه نیاز داشتیم تا از نوع داده ای ترکیبی برای بگهداری بیش از یک رکورد استفاده کنیم میتوانیم از collection استفاده کنیم

در چه مواقعی باید از user_defined و چه مواقعی باید از %rowtype استفاده کنیم ؟
✅ مواقعی که می خواهیم نوع داده ای ترکیبی داشته باشیم که فیلدهای آن در یک جدول یا view وجود ندارد از user_defiend استفاده میکنیم
✅ مواقعی که می خواهیم نوع داده ای ترکیبی داشته باشیم که فیلدهای آن در یک جدول یا view وجود دارد از %rowtype استفاده میکنیم

فیلد در نوع داده ای ترکیبی چیست؟
✅ به هر کدام از اقلام داده ای (ستون ها) در نوع های داده ای ترکیبی یک فیلد (field) گفته میشود

چگونه و در کدام قسمت میتوانیم یک user-defined رکورد تعریف کنیم؟
✅ برای تعریف user_defined رکورد باید دو گام ذیل را طی کنیم
گام 🅰️ : تعریف نوع داده ای با استفاده از کلمه type
گام 🅱️: تعریف متغیری از نوع داده ای تعریف شده گام 🅰️

نحوه تعریف user-defined رکورد به شکل زیر میباشد

declare
🅰️ type <<type_name>> is record (field_name1 type , field_name2 type , field_name3 type , …. );
🅱️ variable_name <<type_name>>;

به مثال ذیل دقت نمایید 👇👇👇👇👇👇

declare
🅰️ type stu_info is record (ST_NUM number , f1_name employees.first_name % type, birth_date date );
🅱️ v_stu_info stu_info;
begin
v_stu_info.stu_num := 123;
end;

👈 همانطور که مشاهده میکنید گام های 🅰️ و 🅱️ در بخش declare تعریف شده اند
👈 میتوان با استفاده از نقطه (.) جهت مراجعه به فیلدهای رکورد تعریف شده به منظور خواندن و نوشتن دسترسی پیدا کرد

چگونه و در کدام قسمت میتوانیم یک رکورد از نوع %rowtype تعریف کنیم؟
✅ برای تعریف رکورد از نوع %rowtype کافی است در قسمت declare شناسه (identifier)ی از نوع جدول یا view به همراه عبارت %rowtype تعریف کنیم

به مثال ذیل دقت نمایید 👇👇👇👇👇👇

declare
emp_rec employees % rowtype;
begin
emp_rec.salary := 2300;
emp_rec.first_name := ‘Ali’;
…..
end;

👈 همانطور که مشاهده میکنید گام 🅰️ برای %rowtype استفاده نمیشود و فقط گام 🅱️ در بخش declare تعریف شده است
👈 همچنان میتوان با استفاده از نقطه (.) جهت مراجعه به فیلدهای رکورد تعریف شده به منظور خواندن و نوشتن دسترسی پیدا کرد
👈 کابرد %rowtype در مواقعی است که میخواهیم تمامی ستون های یک سطر از view یا جدول را در متغیری قرار دهیم ، به مثال ذیل دقت نمایید 👇👇👇

declare
emp_rec employees%rowtype;
begin
select * into emp_rec from employees emp where emp.employee_id = 100;
dbms_output.put_line(emp_rec.first_name);
end;

👈 همچنین میتوان از قابلیت های insert یا update سطر های جدول استفاده کرد ، به مثال ذیل دقت نمایید 👇👇👇👇

declare
emp_rec employees%rowtype;
begin

select 1500,
first_name,
last_name,
‘Ali_ebrahimifard@yahoo.com’ email,
phone_number,
hire_date,
job_id,
salary,
commission_pct,
manager_id,
department_id
into emp_rec
from employees emp
where emp.employee_id = 100;

insert into employees values emp_rec;
end;

در مثال بالا مقادیر ستون های کارمند 100 در emp_rec قرار داده شده و پس ازآن در جدول employees درج میشود

declare
emp_info_rec emp_info%rowtype;
begin
select * into emp_info_rec from emp_info e where e.employee_id = 100;
emp_info_rec.salary := 2300;
update emp_info e set row = emp_info_rec where e.employee_id = 101;

end;

👈 در مثال بالا مقادیر ستون های کارمند 100 در emp_info_rec قرار داده شده و تمام مقادیر ستون های کارمند 101 با مقدار فوق جایگزین میشود
❇️❇️❇️ در بحث بعدی راجع به collection و روش تعریف آن توضیحاتی را ارائه خواهم داد ❇️❇️❇️

دانلود فایل pdf

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