บางคนสามารถให้คำอธิบายเล็ก ๆ เกี่ยวกับวิธีการและเวลาที่ใครบางคนควรใช้ sys_refcursor?
บางคนสามารถให้คำอธิบายเล็ก ๆ เกี่ยวกับวิธีการและเวลาที่ใครบางคนควรใช้ sys_refcursor?
คำตอบ:
เคอร์เซอร์เป็นตัวชี้ไปยังชุดผลลัพธ์ของแบบสอบถาม โดยการส่งคืนsys_refcursor
คุณอนุญาตให้ไคลเอนต์สามารถดึงข้อมูลได้มากหรือน้อยแถวจากแบบสอบถามตามที่ต้องการ ในแอปพลิเคชันแบบ stateful สิ่งนี้สามารถใช้เพื่อค้นหาผลลัพธ์
เคอร์เซอร์สามารถให้ความยืดหยุ่นมากกว่าการเขียนฟังก์ชัน PL / SQL ที่ส่งกลับอาร์เรย์เนื่องจากมันขึ้นอยู่กับไคลเอนต์จำนวนแถวที่จะดึงข้อมูลและเวลาที่จะหยุด ที่กล่าวว่าฉันไม่พบหลายกรณีที่ความยืดหยุ่นเพิ่มเติมนี้มีประโยชน์
เป็นที่น่าสังเกตว่าsys_refcursor
มีการพิมพ์แบบอ่อนดังนั้นคุณสามารถส่งคืนพอยน์เตอร์ไปยังข้อความค้นหาที่ไม่เพียง แต่มีความแตกต่างจากหรือในส่วนคำสั่งเท่านั้น แต่มีจำนวนและประเภทคอลัมน์ที่แตกต่างกันด้วย หรือคุณสามารถใช้เคอร์เซอร์ที่พิมพ์อย่างรุนแรงซึ่งคอลัมน์ในชุดผลลัพธ์ได้รับการแก้ไข
สิ่งนี้ช่วยให้คุณสามารถเขียนฟังก์ชั่นที่ส่งกลับแบบสอบถามที่แตกต่างเช่น
create function get_data ( type varchar2 ) return sys_refcursor as
ret_cur sys_refcursor;
begin
if type = 'EMP' then
open ret_cur for select * from emp;
elsif type = 'DEPT' then
open ret_cur for select * from dept;
end if;
return ret_cur;
end;
อย่างไรก็ตามหากคุณใช้sys_refcursor
ในการสร้างฟังก์ชั่น "เปิดแบบสอบถาม" ทั่วไปดังที่กล่าวมาข้างต้นคุณอาจทำสิ่งผิดปกติ!
get_emps
และget_depts
ฟังก์ชั่น
ตัวอย่างของความเป็นไปได้: เนื่องจากมันมี pl / sql อยู่ด้านหลังเราสามารถกำหนดวัตถุเพื่อแทนแถวได้กำหนดตาราง pl / sql ของวัตถุเหล่านั้น
create type T_MY_TABLE as table of t_my_object;
และจบลงด้วย
OPEN p_recordset FOR select * from table( v_my_table );
ดังนั้นแทนที่จะสร้าง mongo บ่อยครั้งที่หนาแน่นและ / หรือการสอบถามโดยตรงที่คลุมเครือในตารางฐานข้อมูลหนึ่งสามารถสร้างตารางภายในและมีพลังทั้งหมดของ PL / sql เพื่อเติม และลูกค้าเก็บรวบรวมชุดผลลัพธ์จะไม่มีใครฉลาด และการเปลี่ยนคำจำกัดความของตารางภายในนั้นง่ายกว่าจากการจัดการที่ดีกว่าการเปลี่ยนตารางฐานข้อมูล
นอกจากนี้เมื่อใช้ตัวสร้างรายงานอย่างแจสเปอร์คุณสามารถผลัก SQL ออกจากรายงานและลงในฐานข้อมูลและเรียกใช้โพรซีเดอร์เพื่อรับชุดระเบียนโดยปล่อยให้ด้านรายงานเพื่อเน้นการจัดรูปแบบ