با عرض سلام و خسته نباشید خدمت کاربران محترم سایت آموزشی پی وی لرن. و کاربرانی که آموزش کامل PL/SQL را دنبال می کنند. در این پست آموزشی ما در مورد بسته ها در PL / SQL بحث خواهیم کرد. بسته ها اشیائی هستند که گروه ها، متغیرها و زیر برنامه های مرتبط منطقی را مرتبط می کند. یک بسته PL / SQL دو بخش اجباری دارد.
مشخصات این رابط کاربری به بسته است. این فقط نوع ها، متغیرها، ثابت ها، استثنائات، مکان نما ها و زیر برنامه هایی را که می توانند از خارج از بسته اشاره کنند، اعلام می کنند. به عبارت دیگر، شامل تمام اطلاعاتی درباره محتوای بسته می شود، اما کد زیر برنامه ها را شامل نمی شود.
تمام اشیاء که در مشخصات قرار می گیرند، اشیاء عمومی نامیده می شوند.
هر subprogram در مشخصات بسته می باشد. اما کدگذاری شده در بدن بسته PL / SQL ، یک شیء خصوصی نامیده می شود.
قطعه کد زیر یک ویژگی بسته را با یک روش واحد نشان می دهد.
شما می توانید بسیاری از متغیرهای جهانی را تعریف کرده و چندین روش یا عملکردهای داخل بسته را داشته باشید.
1 2 3 4 | CREATE PACKAGE cust_sal AS PROCEDURE find_sal(c_id customers.id%type); END cust_sal; / |
هنگامی که کد بالا در محیط SQL اجرا می شود، نتیجه زیر را تولید می کند.
1 | Package created. |
بدنه بسته دارای کدها برای روش های مختلف اعلام شده در مشخصات بسته PL / SQL و سایر اعلامیه های شخصی است که از کد خارج از بسته پنهان هستند.
بیانیه CREATE PACKAGE BODY برای ایجاد بدنه بسته ها در PL / SQL استفاده می شود.
قطعه کد زیر کد بدنه بسته ها در PL / SQL را برای بسته cust_sal ایجاد شده در بالا نشان می دهد.
ما فرض کردیم که در حال حاضر جدول مشتریان در پایگاه داده ایجاد شده است، همانطور که در جلسه متغیرها در PL / SQL ذکر شده است.
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE OR REPLACE PACKAGE BODY cust_sal AS PROCEDURE find_sal(c_id customers.id%TYPE) IS c_sal customers.salary%TYPE; BEGIN SELECT salary INTO c_sal FROM customers WHERE id = c_id; dbms_output.put_line('Salary: '|| c_sal); END find_sal; END cust_sal; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Package body created. |
عناصر بسته ها در PL / SQL (متغیرها، رویه ها یا توابع) با سینتکس زیر قابل دسترسی هستند.
1 | package_name.element_name; |
در نظر بگیرید، ما قبلا بسته فوق را در Schema پایگاه داده ایجاد کرده ایم، برنامه زیر از متد find_sal از بسته cust_sal استفاده می کند.
1 2 3 4 5 6 | DECLARE code customers.id%type := &cc_id; BEGIN cust_sal.find_sal(code); END; / |
هنگامی که کد بالا در SQL فورمه اجرا می شود.
شناسه مشتری را وارد می کند و هنگامی که شما یک شناسه را وارد می کنید، حقوق و دستمزد مربوطه را به صورت زیر نمایش می دهد.
1 2 3 4 | Enter value for cc_id: 1 Salary: 3000 PL/SQL procedure successfully completed. |
برنامه زیر یک بسته کامل تر را فراهم می کند.
ما از جدول مشتریان ذخیره شده در پایگاه داده با سوابق زیر استفاده خواهیم کرد.
1 2 3 4 5 6 7 8 9 10 11 12 | Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 3000.00 | | 2 | Khilan | 25 | Delhi | 3000.00 | | 3 | kaushik | 23 | Kota | 3000.00 | | 4 | Chaitali | 25 | Mumbai | 7500.00 | | 5 | Hardik | 27 | Bhopal | 9500.00 | | 6 | Komal | 22 | MP | 5500.00 | +----+----------+-----+-----------+----------+ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | CREATE OR REPLACE PACKAGE c_package AS -- Adds a customer PROCEDURE addCustomer(c_id customers.id%type, c_name customerS.No.ame%type, c_age customers.age%type, c_addr customers.address%type, c_sal customers.salary%type); -- Removes a customer PROCEDURE delCustomer(c_id customers.id%TYPE); --Lists all customers PROCEDURE listCustomer; END c_package; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، بسته فوق را ایجاد می کند و نتیجه زیر را نمایش می دهد.
1 | Package created. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | CREATE OR REPLACE PACKAGE BODY c_package AS PROCEDURE addCustomer(c_id customers.id%type, c_name customerS.No.ame%type, c_age customers.age%type, c_addr customers.address%type, c_sal customers.salary%type) IS BEGIN INSERT INTO customers (id,name,age,address,salary) VALUES(c_id, c_name, c_age, c_addr, c_sal); END addCustomer; PROCEDURE delCustomer(c_id customers.id%type) IS BEGIN DELETE FROM customers WHERE id = c_id; END delCustomer; PROCEDURE listCustomer IS CURSOR c_customers is SELECT name FROM customers; TYPE c_list is TABLE OF customerS.No.ame%type; name_list c_list := c_list(); counter integer :=0; BEGIN FOR n IN c_customers LOOP counter := counter +1; name_list.extend; name_list(counter) := n.name; dbms_output.put_line('Customer(' ||counter|| ')'||name_list(counter)); END LOOP; END listCustomer; END c_package; / |
مثال فوق استفاده از جدول ناسازگار را انجام می دهد. ما در مورد مفهوم جدول توپی در جلسه بعدی بحث خواهیم کرد.
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 | Package body created. |
برنامه زیر از روش های اعلام شده و تعریف شده در بسته c_package استفاده می کند.
1 2 3 4 5 6 7 8 9 10 | DECLARE code customers.id%type:= 8; BEGIN c_package.addcustomer(7, 'Rajnish', 25, 'Chennai', 3500); c_package.addcustomer(8, 'Subham', 32, 'Delhi', 7500); c_package.listcustomer; c_package.delcustomer(code); c_package.listcustomer; END; / |
هنگامی که کد بالا در SQL فوری اجرا می شود، نتیجه زیر را تولید می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Customer(1): Ramesh Customer(2): Khilan Customer(3): kaushik Customer(4): Chaitali Customer(5): Hardik Customer(6): Komal Customer(7): Rajnish Customer(8): Subham Customer(1): Ramesh Customer(2): Khilan Customer(3): kaushik Customer(4): Chaitali Customer(5): Hardik Customer(6): Komal Customer(7): Rajnish PL/SQL procedure successfully completed |
بسته ممکن است شامل مجموعه ای از روش هایی باشد که یک API را تشکیل می دهند.
یا مجموعه ای از تعاریف نوع و اعلام متغیر.
این بسته در پایگاه داده جمع آوری و ذخیره می شود، در حالی که محتویات آن توسط بسیاری از برنامه ها به اشتراک گذاشته می شود.