table functions

🔶 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))

✳️✳️✳️ خروجی پرس و جوی فوق به شرح ذیل میباشد 👇👇👇👇

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