Bazıları bana nasıl ve ne zaman sys_refcursor kullanması gerektiği hakkında küçük bir açıklama verebilir mi?
Bazıları bana nasıl ve ne zaman sys_refcursor kullanması gerektiği hakkında küçük bir açıklama verebilir mi?
Yanıtlar:
İmleç, bir sorgu için sonuç kümesinin göstergesidir. A döndürerek sys_refcursor
, istemcinin sorgudan istediği sayıda veya daha az satırı almasına izin verirsiniz. Durum bilgisi olan uygulamalarda bu, sonuçları sayfalara ayırmak için kullanılabilir.
Bir imleç, bir diziyi döndüren bir PL / SQL işlevi yazmaktan daha fazla esnekliğe izin verebilir; Bununla birlikte, bu ek esnekliğin yararlı olduğu birçok durum bulamadım.
sys_refcursor
Zayıf bir şekilde yazıldığını belirtmek gerekir , bu nedenle işaretçileri yalnızca yan tümcelerden farklı olan veya değil, aynı zamanda farklı sayı ve sütun türlerine sahip sorgulara döndürebilirsiniz. Alternatif olarak, sonuç kümesindeki sütunların sabitlendiği kuvvetle yazılan imleci kullanabilirsiniz.
Bu, aşağıdaki gibi farklı sorgular döndüren işlevler yazmanıza olanak tanır:
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;
Ancak, sys_refcursor
yukarıdaki gibi genel bir "sorgu aç" işlevi oluşturmak için kullanıyorsanız , muhtemelen yanlış bir şey yapıyorsunuz!
get_emps
ve get_depts
fonksiyonlara sahip olmak daha iyidir
Olasılıklara örnek olarak: arkada pl / sql olduğu için, bir satırı temsil edecek bir nesne tanımlanabilir, bu nesnelerin pl / sql tablosunu tanımlayabilir,
create type T_MY_TABLE as table of t_my_object;
ve ile biter
OPEN p_recordset FOR select * from table( v_my_table );
Bu nedenle, bir veritabanı tablosunda genellikle yoğun ve / veya şifreli doğrudan sorgular mongo oluşturmak yerine, bir dahili tablo oluşturabilir ve onu doldurmak için pl / sql'in tüm gücüne sahip olabilir. Ve sonuç kümesini toplayan istemci akıllı değildir. Ve iç tablonun tanımını değiştirmek, yönetim tablosundan veritabanı tablosunu değiştirmekten daha kolaydır.
Ayrıca Jasper gibi rapor üreteçleri kullanırken, SQL'i raporun dışına ve veritabanına aktarabilir ve kayıt kümesini almak için prosedürü çağırarak rapor tarafını biçimlendirmeye odaklanabilirsiniz.