🔶 table functions
در ادامه مطالب مربوط به PL/SQL در این بخش به معرفی table function ها و نحوه تعریف و استفاد ه از آنها خواهم پرداخت
تابع چیست ؟
🖌 توابع کدهای PL/SQL هستند که به منظور پیاده سازی کسب و کار خاصی در اوراکل ایجاد و ذخیره میشوند
در اوراکل چه نوع توابعی وجود دارد ؟
🖌 توابع در اوراکل به صورت ذیل دسته بندی میشوند
1️⃣ توابعی که توسط اوراکل نوشته شده و در اختیار ما قرار داده میشوند (predefined function) که شامل دسته بندی ذیل میباشند
➡️ single-row functions
➡️ multiple-row functions
2️⃣ توابعی که توسط برنمه نویس برای پیاده سازی کسب و کار مورد نظر نوشته میشود (user-defined function) که شامل دسته بندی ذیل میباشند
➡️ single-row functions
➡️ table functions
✅ توابع table function ها توابعی هستند که میتوان از خروجی آنها همانند یک جدول استفاده کرد
✅ برای ایجاد یک table function میتوان از یک پکیج استفاده کرد ، به کدهای نوشته شده ذیل دقت نمایید
create or replace package pkg_emp_info is
/*1*/ type emp_info is table of employees%rowtype;
/*2*/function get_emp_info(p_dep_id employees.department_id%type)
return emp_info
pipelined;
end pkg_emp_info;
/————————-/
create or replace package body pkg_emp_info is
function get_emp_info(p_dep_id employees.department_id%type)
return emp_info
pipelined as
begin
/*3*/ for r in (select * from employees e where e.department_id = p_dep_id) loop
/*4*/ pipe row(r);
end loop;
end get_emp_info;
end pkg_emp_info;
❇️❇️❇️ کدهای نوشته شده به شرح ذیل توضیح داده میشود
❇️❇️ کدهای نوشته شده در بخش specification پکیج به شرح ذیل است
❇️ سطر /*1*/ یک نوع داده ای ترکیبی با نام emp_info از نوع رکوردهای employees%rowtype تعریف شده است
❇️ سطر /*2*/ نام و نوع خروجی تابع مورد نظر معرفی شده است ، نام تایع فوق get_emp_info است و پارامتر p_dep_id را به عنوان ورودی دریافت کرده و مجموعه ای از رکوردهای نوع داده ای emp_info را باز میگرداند ، به عبارت pipelined دقت کنید ، استفاده از این عبارت امکان استفاده از قابلیت table function را فراهم می آورد
❇️❇️ کدهای نوشته شده در بخش body پکیج به شرح ذیل است
❇️ در سطر /*3*/ حلقه ای از نوع cursor-with-subquery تعریف شده که بر اساس پارامتر تعریف شده p_dep_id کارمندان سازمان فرستاده شده را فیلتر میکند
❇️ در سطر /*4*/ هر سطر از خروجی حلقه تعریف شده را در table function قرار میدهد
✳️✳️✳️ نحوه استفاد از تابع فوق به صورت ذیل میباشد
select * from table(pkg_emp_info_4.get_emp_info(p_dep_id => 80))
✳️✳️✳️ خروجی پرس و جوی فوق به شرح ذیل میباشد 👇👇👇👇