در ادامه مباحث مطرح شده با موضوع 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 و روش تعریف آن توضیحاتی را ارائه خواهم داد ❇️❇️❇️
برای مشاهده کامل مطلب کلیک کنید