Sometimes it would be easy to have a view which is parameterized. One of the options is to use sys_context. Another option is to makeuse of a pipelined function.
Example package
CREATE OR REPLACE PACKAGE okps_preop_tst IS
TYPE outrec_typ IS RECORD (
id pof_dossiers.id%TYPE,
dossier_type pof_dossiers.dsr_type%TYPE,
dossier_nr pof_dossiers.dossier_nr%TYPE,
dossier_datum pof_dossiers.dossier_datum%TYPE,
patient_nr pof_dossiers.patient_nr%TYPE,
geplande_ok_datum pof_dossiers.geplande_ok_datum%TYPE,
spm_id pof_dossiers.spm_id%TYPE,
bevroren pof_dossiers.bevroren%TYPE,
naam_patient pof_vragenlijst.antwoord%TYPE,
operateur1 pof_vragenlijst.antwoord%TYPE,
operateur2 pof_vragenlijst.antwoord%TYPE,
);
TYPE outrecset IS TABLE OF outrec_typ;
—
— Recordtype = operatiegegevens + dossiergegevens
—
TYPE outrec_typ2 IS RECORD (
ok_sessie_kenmerk_id ok_sessies_kenmerken.ok_sessie_kenmerk_id%TYPE,
volgnummer operaties.volgnummer%TYPE,
datum ok_sessies.datum%TYPE,
specialisten ok_sessies.specialisten%TYPE,
resterende_tijd number,
osk_opmerking ok_sessies_kenmerken.opmerking%TYPE,
begintijd ok_sessies_kenmerken.begintijd%TYPE,
eindtijd ok_sessies_kenmerken.eindtijd%TYPE,
naam varchar2(50),
meisjesnaam varchar2(50),
geboortedatum date,
geslacht varchar2(1),
patient_nr pof_dossiers.patient_nr%TYPE,
operateur1 varchar2(4000),
operateur2 varchar2(4000),
);
TYPE outrecset2 IS TABLE OF outrec_typ2;
—
FUNCTION v_dossiers(p_specialisme in varchar2,p_datum in date) RETURN outrecset PIPELINED;
FUNCTION v_operaties(p_specialisme in varchar2,p_datum in date) RETURN outrecset2 PIPELINED;
END okps_preop_tst;
/
CREATE OR REPLACE PACKAGE BODY okps_preop_tst IS
FUNCTION v_dossiers(p_specialisme in varchar2,p_datum in date) RETURN outrecset PIPELINED
IS
—
— Parameters
— p_specialisme : Code voor specialisme
— p_datum : Minimale (zoek)datum
—
out_rec outrec_typ;
BEGIN
FOR i in (select
dsr.id
,dsr.dsr_type dossier_type
,dsr.dossier_nr dossier_nr
,dsr.dossier_datum dossier_datum
,dsr.patient_nr patient_nr
,dsr.geplande_ok_datum geplande_ok_datum
,dsr.spm_id spm_id
,dsr.bevroren bevroren
,max(decode(vrg.vraag_nr,4,vragenlijst.antwoord,null)) naam_patient
,max(decode(vrg.vraag_nr,8,vragenlijst.antwoord,null)) operateur1
,max(decode(vrg.vraag_nr,8,vragenlijst.antwoord2,null)) operateur2
from pof_dossiers dsr
, pof_vragenlijst vragenlijst
, pof_specialismen spm
, pof_vragen vrg
where dsr.id = vragenlijst.dsr_id
and dsr.spm_id = spm.id
and vrg.id = vragenlijst.vrg_id
and (dsr.geplande_ok_datum>=p_datum or dsr.geplande_ok_datum is null)
and afgevoerd=’N’
and spm.specialisme_code = nvl(p_specialisme,spm.specialisme_code)
and vrg.vraag_nr in (4,8,10,11,12,14,16,19,20,21,28,29,30,51,52,61,63,80,87,93,94,96,97,101,122,130,132,136,137
,138,139,140,141,143,144)
group by dsr.id, dsr.dsr_type, dsr.dossier_nr, dsr.dossier_datum, dsr.patient_nr, dsr.geplande_ok_datum, dsr.spm_id, dsr.bevroren) LOOP\
PIPE ROW(i);
END LOOP;
RETURN;
END v_dossiers;
—
—
—
FUNCTION v_operaties(p_specialisme in varchar2,p_datum in date) RETURN outrecset2 PIPELINED
IS
out_rec outrec_typ2;
BEGIN
FOR i in (select osk.ok_sessie_kenmerk_id, ope.volgnummer , oks.datum
, oks.specialisten , ok_tijd_prog_new(osk.ok_sessie_kenmerk_id,mv_preop.tijdsduur) resterende_tijd
, osk.opmerking osk_opmerking
, osk.begintijd, osk.eindtijd
, pc.naam, pc.meisjesnaam , pc.geboortedatum , pc.geslacht
, mv_preop.patient_nr , ok_operateurs(ope.operatie_id) operateur1
, ok_operateurs(ope.operatie_id,2) operateur2
from oks ok
, ok_sessies oks
, ok_sessies_kenmerken osk
, specialismen spme
, sessies ses
, kenmerken kenm
, operaties ope
, dba_patienten.patienten@proddb pc
, TABLE(v_dossiers(p_specialisme,p_datum)) mv_preop
where oks.ok_id = ok.ok_id (+)
and oks.datum > p_datum
and spme.specialisme_code = nvl(p_specialisme,spme.specialisme_code)
and oks.ok_sessie_id = osk.ok_sessie_id
and spme.specialisme_id (+) = oks.specialisme_id
and ses.sessie_id (+) = oks.sessie_id
and kenm.kenmerk_id (+) = osk.kenmerk_id
and ope.ok_sessie_kenmerk_id (+) = osk.ok_sessie_kenmerk_id
and pc.patientnummer (+) = ope.patient_nr
and mv_preop.id (+) = ope.dossier_id) LOOP
PIPE ROW(i);
END LOOP;
RETURN;
END v_operaties;
END okps_preop_tst;
/
Usage
select * from TABLE(okps_preop_tst.v_operaties(‘XGY’,sysdate)