Как я могу сделать правильно эту процедуру магазина? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть столбец nosologico, который может иметь эти значения ps_1111 или amb_1111 или 11111. Я хочу захватить это значение. PS: У noslogico при одном выполнении может быть несколько значений. Я не знаю, нужно ли нам выполнить там одно дополнительное условие ?? Так что я сделал эту процедуру хранения, но я не знаю, как сказать, имеет ли noslogico% ps% и идет ли при первом условии и т. Д.

create or replace PROCEDURE G_TICKETS_Test(USERIDRICHIEDENTEP IN VARCHAR2, result_cursor OUT SYS_REFCURSOR)
IS
    rc SYS_REFCURSOR;
BEGIN

    OPEN rc FOR SELECT NOSOLOGICO from TICKET_NOTIFICE

    if (NOSOLOGICO= NOSOLOGICO like %PS%) then
    OPEN rc 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 (NOSOLOGICO= NOSOLOGICO like %AMB%) then
    OPEN rc 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 rc 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 t.NOSOLOGICO=r.NOSOLOGICO AND r.IDANAGRAFICA=a.ID ;
    END IF;

    result_cursor := rc;

END;

1 Ответ

0 голосов
/ 06 ноября 2018

Полагаю, у вас есть условие для возврата одной строки 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; 
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...