با عرض سلام و خسته نباشید خدمت کاربران محترم سایت آموزشی پی وی لرن. و کاربرانی که آموزش کامل PL/SQL را دنبال می کنند. در این جلسه، ما PL / SQL Object Oriented (تکنولوژی object در PL/SQL)را مورد بحث قرار خواهیم داد. PL / SQL در طراحی پایگاه داده شی گرا در اوراکل کمک کند. نوع شی به شما اجازه می دهد انواع کامپوزیت را ایجاد کنید. استفاده از اشیاء به شما اجازه می دهد اشیاء دنیای واقعی را با ساختار خاصی از داده ها و متد های آن برای عملیات اجرا کنید. در تکنولوژی object در PL/SQL اشیاء دارای صفات و متد هستند. صفات، خواص یک شی هستند و برای ذخیره سازی حالت شی مورد استفاده قرار می گیرند؛ و متد ها برای مدل سازی رفتار آن استفاده می شود.
در PL / SQL Object Oriented اشیاء با استفاده از عبارت CREATE [OR REPLACE] TYPE ایجاد می شوند.
در زیر نمونه ای برای ایجاد یک شیء آدرس ساده که شامل چند ویژگی است را خواهید دید.
1 2 3 4 5 6 7 8 | CREATE OR REPLACE TYPE address AS OBJECT (house_no varchar2(10), street varchar2(30), city varchar2(20), state varchar2(10), pincode varchar2(10) ); / |
هنگامی که کد بالا در SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
بگذارید یک مشتری دیگر را ایجاد کنیم که در آن ویژگی ها و متد های متفاوتی را با هم به دست می آوریم. تا احساس شیء گرا داشته باشیم.
1 2 3 4 5 6 7 8 | CREATE OR REPLACE TYPE customer AS OBJECT (code number(5), name varchar2(30), contact_no varchar2(12), addr address, member procedure display ); / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
تعریف یک نوع شیء یک طرح برای جسم را فراهم می کند. برای استفاده از این شی، شما باید نمونه هایی از این شیء را ایجاد کنید.
شما می توانید به ویژگی ها و متد های جسم با استفاده از نام نمونه و اپراتور دسترسی (.) به صورت زیر دسترسی پیدا کنید.
1 2 3 4 5 6 7 8 9 10 11 | DECLARE residence address; BEGIN residence := address('103A', 'M.G.Road', 'Jaipur', 'Rajasthan','201301'); dbms_output.put_line('House No: '|| residence.house_no); dbms_output.put_line('Street: '|| residence.street); dbms_output.put_line('City: '|| residence.city); dbms_output.put_line('State: '|| residence.state); dbms_output.put_line('Pincode: '|| residence.pincode); END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 4 5 6 7 | House No: 103A Street: M.G.Road City: Jaipur State: Rajasthan Pincode: 201301 PL/SQL procedure successfully completed. |
متد های عضو برای دستکاری ویژگی های شیء مورد استفاده قرار می گیرند. هنگام اعلان نوع شیء، اعلان یک متد عضو را ارائه می دهید. بدن شیء کد را برای متد های عضو تعریف می کند. بدن شیء با استفاده از دستور CREATE TYPE BODY ایجاد می شود.
سازندگان توابع هستند، که یک شیء جدید را به عنوان ارزش آن به ارمغان می آورد. هر جسم دارای یک سیستم سازنده تعریف شده است.
نام سازنده همان نوع شیء است.
به عنوان مثال :
1 | residence := address('103A', 'M.G.Road', 'Jaipur', 'Rajasthan','201301'); |
متد مقایسه برای مقایسه اشیاء استفاده می شود. دو متد برای مقایسه اشیاء وجود دارد.
متد نقشه یک تابع است که به نحوی اجرا می شود که ارزش آن به ارزش صفات بستگی دارد. به عنوان مثال، برای شیء مشتری، اگر کد مشتری برای دو مشتری یکسان باشد، هر دو مشتری می توانند همانند باشند. بنابراین ارتباط بین این دو موضوع به ارزش کد بستگی دارد.
متد Order متد منطقی را برای مقایسه دو شیء اجرا می کند. به عنوان مثال، برای یک شیء مستطیل، یک مستطیل بزرگتر از یک مستطیل دیگر است، اگر هر دو طرف بزرگتر باشد.
اجازه دهید سعی کنیم مفاهیم فوق را با استفاده از شیء مستطیلی زیر درک کنیم.
1 2 3 4 5 6 7 8 | CREATE OR REPLACE TYPE rectangle AS OBJECT (length number, width number, member function enlarge( inc number) return rectangle, member procedure display, map member function measure return number ); / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
ایجاد بدنه نوع
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE OR REPLACE TYPE BODY rectangle AS MEMBER FUNCTION enlarge(inc number) return rectangle IS BEGIN return rectangle(self.length + inc, self.width + inc); END enlarge; MEMBER PROCEDURE display IS BEGIN dbms_output.put_line('Length: '|| length); dbms_output.put_line('Width: '|| width); END display; MAP MEMBER FUNCTION measure return number IS BEGIN return (sqrt(length*length + width*width)); END measure; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type body created. |
در حال حاضر با استفاده از شیء مستطیل و توابع عضو آن
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | DECLARE r1 rectangle; r2 rectangle; r3 rectangle; inc_factor number := 5; BEGIN r1 := rectangle(3, 4); r2 := rectangle(5, 7); r3 := r1.enlarge(inc_factor); r3.display; IF (r1 > r2) THEN -- calling measure function r1.display; ELSE r2.display; END IF; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 4 5 6 | Length: 8 Width: 9 Length: 5 Width: 7 PL/SQL procedure successfully completed. |
در حال حاضر، با استفاده از یک متد سفارش، اثر مشابهی می تواند داشته باشد. با استفاده از یک متد سفارش، یک شیء مستطیل را مجددا بازسازی کنیم.
1 2 3 4 5 6 7 | CREATE OR REPLACE TYPE rectangle AS OBJECT (length number, width number, member procedure display, order member function measure(r rectangle) return number ); / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
ایجاد ساختمان جسمی
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE OR REPLACE TYPE BODY rectangle AS MEMBER PROCEDURE display IS BEGIN dbms_output.put_line('Length: '|| length); dbms_output.put_line('Width: '|| width); END display; ORDER MEMBER FUNCTION measure(r rectangle) return number IS BEGIN IF(sqrt(self.length*self.length + self.width*self.width)> sqrt(r.length*r.length + r.width*r.width)) then return(1); ELSE return(-1); END IF; END measure; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type body created. |
با استفاده از شیء مستطیل و تابع عضو آن
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DECLARE r1 rectangle; r2 rectangle; BEGIN r1 := rectangle(23, 44); r2 := rectangle(15, 17); r1.display; r2.display; IF (r1 > r2) THEN -- calling measure function r1.display; ELSE r2.display; END IF; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 4 5 6 7 8 | Length: 23 Width: 44 Length: 15 Width: 17 Length: 23 Width: 44 PL/SQL procedure successfully completed. |
تکنولوژی object در PL/SQL اجازه می دهد تا یک شیء از اشیاء پایه موجود ایجاد شود. برای پیاده سازی ارث، اشیاء پایه باید به عنوان نهایی تعریف شوند.
پیش فرض FINAL است.
برنامه های زیر نشان دهنده ارث در اشیاء PL / SQL هستند. اجازه دهید یک شی دیگر با نام TableTop ایجاد کنیم، این از شیء Rectangle به ارث برده می شود. برای این، ما باید یک شئ مستطیل پایه ایجاد کنیم.
1 2 3 4 5 6 | CREATE OR REPLACE TYPE rectangle AS OBJECT (length number, width number, member function enlarge( inc number) return rectangle, NOT FINAL member procedure display) NOT FINAL / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
ایجاد پایه ساختمان جسمی
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE OR REPLACE TYPE BODY rectangle AS MEMBER FUNCTION enlarge(inc number) return rectangle IS BEGIN return rectangle(self.length + inc, self.width + inc); END enlarge; MEMBER PROCEDURE display IS BEGIN dbms_output.put_line('Length: '|| length); dbms_output.put_line('Width: '|| width); END display; END; / |
هنگامی که کد بالا در SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type body created. |
ایجاد جدول تخت کوچک
1 2 3 4 5 6 | CREATE OR REPLACE TYPE tabletop UNDER rectangle ( material varchar2(20), OVERRIDING member procedure display ) / |
هنگامی که کد بالا در SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
ایجاد نوع بدنه برای tabletop
1 2 3 4 5 6 7 8 | CREATE OR REPLACE TYPE BODY tabletop AS OVERRIDING MEMBER PROCEDURE display IS BEGIN dbms_output.put_line('Length: '|| length); dbms_output.put_line('Width: '|| width); dbms_output.put_line('Material: '|| material); END display; / |
هنگامی که کد بالا در SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type body created. |
استفاده از شی میز و توابع عضو آن:
1 2 3 4 5 6 7 8 9 10 | DECLARE t1 tabletop; t2 tabletop; BEGIN t1:= tabletop(20, 10, 'Wood'); t2 := tabletop(50, 30, 'Steel'); t1.display; t2.display; END; / |
هنگامی که کد بالا در SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 4 5 6 7 8 | Length: 20 Width: 10 Material: Wood Length: 50 Width: 30 Material: Steel PL/SQL procedure successfully completed. |
clause NOT INSTANTIABLE اجازه می دهد تا شما یک شیء انتزاعی را اعلام کنید. شما نمی توانید از یک شیء انتزاعی به عنوان آن استفاده کنید؛ شما باید یک نوع زیر نوع یا نوع خاصی از این اشیاء را برای استفاده از ویژگی های آن ایجاد کنید.
برای مثال
1 2 3 4 5 6 | CREATE OR REPLACE TYPE rectangle AS OBJECT (length number, width number, NOT INSTANTIABLE NOT FINAL MEMBER PROCEDURE display) NOT INSTANTIABLE NOT FINAL / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Type created. |
PL / SQL Object Oriented (تکنولوژی object در PL/SQL) این است که توسعه دهندگان را قادر سازد تا برنامه های کارآمد را به صورت امن و سریع در جداول ارتباطی در پایگاه داده اوراکل فعال کنند. آیا می دانستید که شما همچنین می توانید برنامه نویسی شی گرا با PL / SQL انجام دهید؟ به جای کلاسها، پایگاه داده اوراکل انواع شیء را ارائه می دهد، اما تقریبا تمام ویژگی هایی که ممکن است از جهت گیری شیء از جمله سازنده ها، ارث، پلیمورفیسم دینامیکی و جایگزینی آشنا باشند در انواع شیء موجود هستند.