Полагаю, у вас есть условие для возврата одной строки NOSOLOGICO
из TICKET_NOTIFICE
. Если это так, вы можете использовать скалярную переменную и использовать условия IF
.
Как всегда, я предлагаю вам использовать явный синтаксис JOIN
вместо
,
синтаксис для объединений.
CREATE OR replace PROCEDURE g_tickets_test (useridrichiedentep IN VARCHAR2,
result_cursor OUT SYS_REFCURSOR
)
IS
v_nosologico ticket_notifice.nosologico%TYPE;
BEGIN
SELECT nosologico
INTO v_nosologico
FROM ticket_notifice n
WHERE n.useridrichiedente = useridrichiedentep ;
IF ( v_nosologico LIKE '%PS%' ) THEN
OPEN result_cursor FOR
SELECT DISTINCT t.id,
a.nome,
a.cognome,
t.operazione
FROM ticket_notifice t,
anagrafica a,
ps_metadata m
WHERE t.useridrichiedente = useridrichiedentep
AND t.stato = '1'
AND t.notification = '0'
AND t.nosologico = m.episodiopsnum
AND m.idanagrafica = a.id;
ELSIF ( v_nosologico LIKE '%AMB%' ) THEN
OPEN result_cursor FOR
SELECT DISTINCT t.id,
a.nome,
a.cognome,
t.operazione
FROM ticket_notifice t,
anagrafica a,
amb_impegnative b,
amb_metadata m
WHERE t.useridrichiedente = useridrichiedentep
AND t.stato = '1'
AND t.notification = '0'
AND regexp_substr(t.nosologico, '[^AMB_]+$', 1, 1) =
c.id_amb_metadati
AND c .id_amb_metadati = d.id_amb_metadati
AND d.idassistito = a.idassistito;
ELSE
OPEN result_cursor FOR
SELECT DISTINCT t.id,
a.nome,
a.cognome,
t.operazione
FROM ticket_notifice t,
ricovero r,
anagrafica a
WHERE t.useridrichiedente = useridrichiedentep
AND t.stato = '1'
AND t.notification = '0'
AND regexp_substr(t.nosologico, '[^PS_]+$', 1, 1) = r.nosologico
AND r.idanagrafica = a.id;
END IF;
END;
/