Mukesh Pr@sad Ответов: 0

Как написать эквивалентную хранимую процедуру для приведенного ниже оператора DML.


WITH e AS
(
    Select* from enrollment 
    Where effective_end_dt IS NULL
),
h AS
(
    Select* from member_status_history
    Where effective_end_dt IS NULL
)
Select Distinct 
    (m.ssn),
    d.department_cd,
    m.last_nm,
    e.plan_id,
    p.plan_cd,
    S.enrollmemt_status_desc
From 
    member m,
    e,
    h,
    PLAN p,
    enrollment_status_s,
    department d
Where 
    m.member_id =e.member_id
AND 
    m.member_id = h.member_id
AND 
    e.plan_id = p.plan_id
AND 
    e.enrollment_status_id =s.enrollment_status_id
AND 
    s.enrollment_status_id='510'
AND 
    m.department_id=d.department_id
AND 
    h.member_status='530'
AND 
    e.plan_id IN (307,308,309)
AND 
    NOT EXISTS
    (
        SELECT t.member_id
        From transaction_register t
        Where m.member_id = t.member_id
        AND t.plan_id = e.plan_id
        AND t.update_dt >= TO_DATE('01/11/2016 00:00:00', 'mm/DD/yyyy hh24:mi:ss')
        AND t.update_dt <= TO_DATE('01/12/2016 23:59:59', 'mm/DD/yyyy hh24:mi:ss')
        AND t.transaction_type_cd='PAYDE'
        AND t.update_user_id='PAYPGM'
    )
Order By 
    e.plan_id, 
    ssn


Что я уже пробовал:

Я создал эквивалентную хранимую процедуру, но это кажется неправильным, может ли кто-нибудь помочь мне, что будет эквивалентной хранимой процедурой для вышеуказанного запроса.
CREATE OR REPLACE Procedure SP_GET_UNMATCHED_MEMBER
BEGIN
    WITH e AS
    (
        Select* from enrollment 
        Where effective_end_dt IS NULL
    ),
    h AS
    (
        Select* from member_status_history
        Where effective_end_dt IS NULL
    )
    Select Distinct 
        (m.ssn),
        d.department_cd,
        m.last_nm,
        e.plan_id,
        p.plan_cd,
        S.enrollmemt_status_desc
    From 
        member m,
        e,
        h,
        PLAN p,
        enrollment_status_s,
        department d
    Where
        m.member_id =e.member_id
    AND
        m.member_id = h.member_id
    AND
        e.plan_id = p.plan_id
    AND
        e.enrollment_status_id =s.enrollment_status_id
    AND
        s.enrollment_status_id='510'
    AND
        m.department_id=d.department_id
    AND
        h.member_status='530'
    AND
        e.plan_id IN (307,308,309)
    AND
        NOT EXISTS
        (
            SELECT t.member_id
            From transaction_register t
            Where m.member_id = t.member_id
            AND t.plan_id = e.plan_id
            AND t.update_dt >= TO_DATE('01/11/2016 00:00:00', 'mm/DD/yyyy hh24:mi:ss')
            AND t.update_dt <= TO_DATE('01/12/2016 23:59:59', 'mm/DD/yyyy hh24:mi:ss')
            AND t.transaction_type_cd='PAYDE'
            AND t.update_user_id='PAYPGM'
        )
    Order By 
        e.plan_id, 
        ssn
END;

Garth J Lancaster

"Я создал эквивалентную хранимую процедуру, но она кажется неправильной" - почему бы вам не использовать "улучшить вопрос" для обновления с вашей попыткой создать хранимую процедуру и не описать, в чем заключается проблема(ы) с ней - таким образом, мы можем помочь вам исправить ваш собственный код (мы все равно не пишем код для людей, поэтому, если вы не опубликуете свой собственный код, все, что вы, скорее всего, получите обратно, - это список ссылок google на хранимые процедуры)

Richard Deeming

Вы должны использовать правильный INNER JOINs в вашем запросе. Кроме этого, в вашей хранимой процедуре нет ничего явно неправильного. Вы должны предоставить подробную информацию об ошибке, которую вы получаете.

Mukesh Pr@sad

Запрос работает нормально, и я получаю необходимые данные, только проблема в том, что я не могу написать этот запрос в виде хранимой процедуры.

0 Ответов