REF CURSOR not returned to "Output Variables"

I have a poorly performing procedure that returns a Ref Cursor. I can retrieve the Ref Cursor via Crystal Reports, so I know that it is working. However, the data is not showing up in the "Output Variables" section on SQL Developer version 3.1.07.42.
I have other procs that run much faster and the data shows up just fine for them.
I'm wondering if the fact that the query runs in about 4 minutes is causing the results to be lost?
Oracle 11.2.0.3.0 64 bit on AIX version 6.
Sql Developer 3.1.07.42.
Thanks.

Can't reproduce. Test case:
<code>
create or replace
package pivot
as
type rc is ref cursor;
procedure tst4( c1 in out rc, c2 out rc, i out integer, c4 out rc );
end;
create or replace
package body pivot
as
procedure tst4( c1 in out rc, c2 out rc, i out integer, c4 out rc ) is
stmt1 long;
stmt2 long;
stmt3 long;
stmt4 long;
begin
stmt1 := 'select 11 one, 12 two, ''a'' from dual union select 21 one, 22 two, ''b'' from dual';
open c1 for stmt1;
stmt2 := 'select 2 from dual';
select count(1) into stmt4 from dual -- simulated delay
connect by level < 40000000;
open c2 for stmt2;
i:=42;
stmt4 := 'select level from dual connect by level < 7';
open c4 for stmt4;
end;
end;

Similar Messages

  • Ref cursor not returning any data

    Hi
    How can I raise an exception when ref cursor is not retrieving any data.
    create or replace function getempdetails(p_deptno in number)
    return sys_refcursor
    is
    v_refcursor sys_refcursor;
    begin
    open v_refcursor for
    select * from emp
    where deptno = p_deptno;
    return v_refcursor;
    exception
    when no_data_found then
    dbms_output.put_lline('No data available for p_deptno');
    end;
    Say for example p_deptno = 12
    Thanks
    Raghu
    Message was edited by:
    user584123

    It is useless but... you can do this
    create or replace function getempdetails(
         p_deptno in number
    return sys_refcursor
    is
         v_refcursor sys_refcursor;
         flag number;
    begin
         select count(*)
              into flag
         from emp
         where deptno = p_deptno
              and rownum = 1;
         if ( flag = 0) then
              dbms_output.put_lline('No data available for p_deptno');
              return null;
         else
              open v_refcursor for
              select * from emp
              where deptno = p_deptno;
              return v_refcursor;
         end if;          
    end;Bye Alessandro
    Message was edited by:
    Alessandro Rossi
    Or this
    create or replace function getempdetails(
         p_deptno in number
    return sys_refcursor
    is
         v_refcursor sys_refcursor;
         flag number;
    begin
         select 1
              into flag
         from emp
         where deptno = p_deptno
              and rownum = 1; -- This throws the exception
         open v_refcursor for
         select * from emp
         where deptno = p_deptno;
         return v_refcursor;
    end;

  • Ref Cursor closed returning to Form

    Hi,
    I came across this old thread which seems to be an exact match for my problem.
    sys ref cursor is closed
    And whereas the solutions do work as stated there is an issue with it that i wonder if anyone here has since got around.
    Take those examples and make the sql dynamic. on return to the form the ref cursor is instantaneouly closed for you making the thing unusable.
    i.e.
    OPEN cur FOR SELECT 'x' from dual
    works just fine but
    OPEN cur FOR 'SELECT ''X'' from dual'
    resutls in an closed cursor the moment the ref cursor parameter returns to the form. I need the dynamic form because my cursor is truly built dynamically.
    Any ideas anyone?

    Hi,
    try this :
    1. declare in the package specification
    TYPE rec_view IS RECORD(
      COL1        VARCHAR2(250),
      COL2        VARCHAR2(250),
      COL3        VARCHAR2(250),
      COL4        VARCHAR2(250),
      COL5        VARCHAR2(250)
      TYPE t_ref_curs IS REF CURSOR RETURN rec_view;
      TYPE t_rec_c IS REF CURSOR;
    2. define the dynamic sql - procedure
    PROCEDURE   prc_getdata (p_refcur IN OUT t_ref_curs, p_result OUT VARCHAR2,
                             p_filter IN varchar2 DEFAULT NULL, p_orderby In VARCHAR2 DEFAULT NULL)  IS
      BEGIN
            -- dyn cursor ! --
            EXECUTE IMMEDIATE
                    'BEGIN
                          OPEN :a FOR ' ||
                              ' select empno, ename, job, mgr, hiredate, sal  from emp'||' '||
                                p_filter  ||' '||
                                p_orderby ||'; '||
                     'END;'
               USING p_refcur;
       END prc_getdata;
    3. define in the Form a PL/SQL based block on this procedure.
    Hope it helps.
    Best regards
    Friedhold

  • Ref cursor stopped returning values for the output.

    Hi Everyone,
    My DB version is
    BANNER                                                        
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
    PL/SQL Release 10.2.0.1.0 - Production                          
    CORE 10.2.0.1.0 Production                                        
    TNS for Linux: Version 10.2.0.1.0 - Production                  
    NLSRTL Version 10.2.0.1.0 - Production  
    Please do have a look at the code, and let me know where I've gone wrong, because select query is fetching data. Previously procedure was returning values too through ref cursor. Please correct me where I've gone wrong.
    create or replace
    PROCEDURE
    SPL_SPN_MISSING_EMR_AOE_DTL (IN_PATIENT_ID            NUMBER,
                                 IN_FACILITY_ID           NUMBER,
                                 IN_DRAW_DT               DATE,
                                 IN_REQUISITION_NUMBER    ORDER_REQUISITION_HEADER.REQUISITION_NUMBER%TYPE,
                                 IN_CORP_ACRONYM          CORPORATION.CORPORATION_ACRONYM%TYPE,
                                 IN_ABCDEF_MRN           PATIENT.ABCDEF_MRN%TYPE,
                                 IN_ACCOUNT_NUMBER        FACILITY_ACCOUNT_DETAIL.ACCOUNT_NUMBER%TYPE,
                                 IN_HLAB_NUM              FACILITY_ACCOUNT_DETAIL.HLAB_NUM%TYPE,
                                 OV_COMMENTS              OUT   VARCHAR2,
                                 OR_QUES_AND_ANS          OUT   SYS_REFCURSOR) AS                               
    *  Copyright (C) 2013 ABCDEF Laboratories
    *  All Rights Reserved
    *  This Work Contains Trade Secrets And Confidential Material Of
    *  ABCDEF Laboratories., And Its Use Of Disclosure In Whole Or In Part
    *  Without Express Written Permission Of ABCDEF Laboratories Is Prohibited.
    *  Company              : ABCDEF Laboratories
    *  Project              : ABCDEF Scorpion
    *  Name                 : SPL_SPN_MISSING_EMR_AOE_DTL
    * In Parameters         : In_Patient_Id            Number
    *                         In_Facility_Id           Number
    *                         In_Draw_Dt               Date
    *                         In_Requisition_Number    Order_Requisition_Header.Requisition_Number%Type,
    *                         In_Corp_Acronym          Corporation.Corporation_Acronym%Type
    *                         In_ABCDEF_Mrn           Patient.ABCDEF_Mrn%Type
    *                         In_Account_Number        Facility_Account_Detail.Account_Number%Type
    *                         In_Hlab_Num              Facility_Account_Detail.Hlab_Num%Type
    * Out Parameters        : OV_COMMENTS           Out   Varchar2
    *                         OR_QUES_AND_ANS       Out   Sys_Refcursor
    * Description           : This Procedure Will Fetch The Mising Emr Aoe Detail And Provide
    *                         Necessary Comments As Well.
    * Modification History  :
    *   Date       Version No.        Author                 Description
    * 21/01/2014      1.0            ABCDEF               Initial Version  
    * 27/01/2014      1.1            ABCDEF               Restricted the output for duplicate questions
    *                                                     and answers, partially answered AOE. Also renamed
    *                                                     the output variable names.
        CC_PACKAGE_NAME             CONSTANT VARCHAR2(50)  := 'SPL_SPN_MISSING_EMR_AOE_DTL';   
        CC_PROCEDURE_NAME           CONSTANT VARCHAR2(50)  := 'SPL_SPN_MISSING_EMR_AOE_DTL';
        VC_AVL_PAT_QUES             VARCHAR2(1000);
        VC_DUP_PAT_QUES             VARCHAR2(1000);
        VC_ACTUAL_QUES              VARCHAR2(1000);
        VC_ACTUAL_QUES_CNT          NUMBER:= 0;
        VR_QUES_AND_ANS             SYS_REFCURSOR;
        VN_AVL_PAT_QUES_CNT         NUMBER := 0;
        VN_DUP_PAT_QUES_CNT         NUMBER := 0;
        VN_EXACT_PAT_ID_CNT         NUMBER := 0;
        VN_DUPL_PAT_ID              NUMBER := 0;
        VN_EXTERNAL_ID              PATIENT.EXTERNAL_ID%TYPE;
        VC_OBX_QUES                 VARCHAR2(1000);
        VC_OBX_QUES_CNT             NUMBER := 0;
        VN_OBX_QUES_CNT             NUMBER := 0;
        PAT_EXTERNAL_ID             PATIENT.EXTERNAL_ID%TYPE;
        VC_EXACT_BOOLEAN_VAL        VARCHAR2(10) := 'FALSE';
        VC_EXACT_PAR_BOOLEAN_VAL    VARCHAR2(10) := 'FALSE';
        VC_DUPL_BOOLEAN_VAL         VARCHAR2(10) := 'FALSE';
        VC_DUPL_PAR_BOOLEAN_VAL     VARCHAR2(10) := 'FALSE';
        VC_REJECTED_BOOLEAN_VAL     VARCHAR2(10) := 'FALSE';
        VC_REJECTED_PAR_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
        VC_COMMENTS                 VARCHAR2(100);
        VC_PAR_COMMENTS             VARCHAR2(100);
        VC_RETURN_EXACT_PAT         CHAR(1) := 'N';
        VC_RETURN_DUPL_PAT          CHAR(1) := 'N';
        VC_RETURN_REJECT_PAT        CHAR(1) := 'N';
        VC_CHK_FOR_EXT_ID           CHAR(1) := 'N';
        VN_MAX_MSG_ID               INTERFACE_A04_OBX_SEGMENT.MSG_ID%TYPE;
        VN_MAX_COUNT                NUMBER := 0;
        VN_ITERATION_RUN            NUMBER := 0;
    BEGIN
       SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                      (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IN_BATCH_ID        => '100'
                      ,IC_MESSAGE_TEXT    => 'Start of the procedure with Patient_Id:'||IN_PATIENT_ID||' Facility_Id:'||IN_FACILITY_ID||
                                             ' Draw_Dt:'||IN_DRAW_DT||' Requisition_Number:'||IN_REQUISITION_NUMBER||' Corp_Acronym:'||IN_CORP_ACRONYM||
                                             ' ABCDEF_Mrn:'||IN_ABCDEF_MRN||' Account_Number:'||IN_ACCOUNT_NUMBER||' Hlab_Num:'||IN_HLAB_NUM);
        <<AOE_TEST_LOOP>>
        FOR AOE_REC IN (SELECT ORD.TEST_ID
                            FROM ORDER_REQUISITION_DETAIL ORD
                           WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
                                                             FROM ORDER_REQUISITION_HEADER ORH
                                                            WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER)
                            AND ORD.TEST_CODE IN (SELECT TEST_CODE FROM INTERFACE_ADT_AOE_MASTER WHERE SOURCE_SYSTEM = IN_CORP_ACRONYM))
            LOOP
                VN_ITERATION_RUN := VN_ITERATION_RUN + 1;
                SELECT COUNT(DISTINCT PATIENT_ID)
                INTO VN_EXACT_PAT_ID_CNT
                FROM EMR_ADTAOE_DTL
                WHERE PATIENT_ID  = IN_PATIENT_ID
                AND   TEST_ID = AOE_REC.TEST_ID
                AND   FACILITY_ID = IN_FACILITY_ID   
                AND   (DRAW_DATE   = IN_DRAW_DT
                    OR DRAW_DATE   = TO_DATE('2999/12/31','YYYY/MM/DD'))
                AND   SOURCE_SYSTEM = IN_CORP_ACRONYM ;
                --Collecting all questions in interface_adt_aoe_master
                SELECT STRAGG(SUB1.QUESTION_CODE), COUNT(SUB1.QUESTION_CODE)
                INTO VC_ACTUAL_QUES, VC_ACTUAL_QUES_CNT
                FROM (SELECT DISTINCT QUESTION_CODE FROM INTERFACE_ADT_AOE_MASTER
                      WHERE TEST_CODE = (SELECT TEST_CODE FROM TEST WHERE TEST_ID = AOE_REC.TEST_ID)
                      AND   SOURCE_SYSTEM = IN_CORP_ACRONYM
                      ORDER BY QUESTION_CODE) SUB1;
                 SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                              (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                              ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                              ,IN_BATCH_ID        => '100'
                              ,IC_MESSAGE_TEXT    => 'vc_actual_ques:'||VC_ACTUAL_QUES ||
                                                     ' vn_exact_pat_id_cnt:'||VN_EXACT_PAT_ID_CNT||
                                                     ' aoe_rec.test_id:'||AOE_REC.TEST_ID||
                                                     ' VN_ITERATION_RUN:'||VN_ITERATION_RUN);
                <<MAIN_IF_BLOCK>>
                IF
                    VN_EXACT_PAT_ID_CNT = 1 AND
                    VN_ITERATION_RUN    >= 1 THEN               
                    --Collecting avaliable questions in emr_adtaoe_dtl               
                    SELECT STRAGG(SUB.QUESTION_CODE), COUNT(DISTINCT SUB.QUESTION_CODE)
                    INTO VC_AVL_PAT_QUES, VN_AVL_PAT_QUES_CNT
                    FROM (SELECT DISTINCT QUESTION_CODE FROM EMR_ADTAOE_DTL
                          WHERE TEST_ID = AOE_REC.TEST_ID
                          AND   PATIENT_ID  = IN_PATIENT_ID
                          AND   FACILITY_ID = IN_FACILITY_ID
                          AND   (DRAW_DATE   = IN_DRAW_DT
                              OR DRAW_DATE   = TO_DATE('2999/12/31','YYYY/MM/DD'))
                          AND   SOURCE_SYSTEM = IN_CORP_ACRONYM
                          AND   ANSWER IS NOT NULL
                          ORDER BY QUESTION_CODE) SUB;
                    SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                      (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IN_BATCH_ID        => '100'
                      ,IC_MESSAGE_TEXT    => 'vc_avl_pat_ques:'||VC_AVL_PAT_QUES||
                                             ' vn_avl_pat_ques_cnt:'||VN_AVL_PAT_QUES_CNT);
                    <<CASE_1_AND_2>>
                    IF
                        VC_AVL_PAT_QUES = VC_ACTUAL_QUES THEN
                        VC_EXACT_BOOLEAN_VAL := 'TRUE';
                        VC_COMMENTS := 'AOE AVAILABLE';
                    ELSIF--<<case_1_and_2>>
                        (VC_AVL_PAT_QUES != VC_ACTUAL_QUES OR VC_AVL_PAT_QUES IS NULL) AND
                        VN_AVL_PAT_QUES_CNT >= 0 THEN
                        VC_EXACT_PAR_BOOLEAN_VAL := 'TRUE';
                        VC_PAR_COMMENTS := 'PARTIAL AOE AVAILABLE';
                    END IF;--<<case_1_and_2>>
                ELSIF
                    VN_EXACT_PAT_ID_CNT = 0 AND
                    VN_ITERATION_RUN    > 1 THEN 
                    VC_EXACT_PAR_BOOLEAN_VAL := 'TRUE';
                    VC_PAR_COMMENTS := 'PARTIAL AOE AVAILABLE';
                ELSIF--<<Main_if_block>>
                    VN_EXACT_PAT_ID_CNT = 0 THEN
                    <<DUPL_PAT_LOOP>>
                    FOR PAT_ID_REC IN(SELECT DISTINCT PATIENT_ID
                                      FROM PATIENT P
                                      WHERE P.ABCDEF_MRN = IN_ABCDEF_MRN
                                      AND EXISTS(SELECT 1 FROM EMR_ADTAOE_DTL EAD
                                                 WHERE EAD.PATIENT_ID  = P.PATIENT_ID
                                                 AND   EAD.TEST_ID     = AOE_REC.TEST_ID
                                                 AND   EAD.FACILITY_ID = IN_FACILITY_ID
                                                 AND  (EAD.DRAW_DATE  = IN_DRAW_DT
                                                    OR EAD.DRAW_DATE  = TO_DATE('2999/12/31','YYYY/MM/DD'))
                                                 AND   EAD.SOURCE_SYSTEM   = IN_CORP_ACRONYM)
                                      AND P.PATIENT_ID != IN_PATIENT_ID)
                    LOOP
                        --Collecting avaliable questions in emr_adtaoe_dtl
                        SELECT STRAGG(SUB.QUESTION_CODE), COUNT(QUESTION_CODE)
                        INTO VC_DUP_PAT_QUES, VN_DUP_PAT_QUES_CNT
                        FROM (SELECT QUESTION_CODE FROM EMR_ADTAOE_DTL   
                               WHERE TEST_ID     = AOE_REC.TEST_ID
                               AND   PATIENT_ID  = PAT_ID_REC.PATIENT_ID
                               AND   FACILITY_ID = IN_FACILITY_ID
                               AND   (DRAW_DATE   = IN_DRAW_DT
                                   OR DRAW_DATE   = TO_DATE('2999/12/31','YYYY/MM/DD'))
                               AND   SOURCE_SYSTEM = IN_CORP_ACRONYM
                               AND   ANSWER IS NOT NULL
                               ORDER BY QUESTION_CODE) SUB;
                        <<CASE_3_AND_4>>
                        IF 
                            VC_DUP_PAT_QUES = VC_ACTUAL_QUES THEN
                            VC_DUPL_BOOLEAN_VAL  := 'TRUE';
                            VC_COMMENTS := 'AOE AVAILABLE FOR DUPLICATE PATIENT';
                        ELSIF
                            VC_DUP_PAT_QUES != VC_ACTUAL_QUES AND
                            VN_DUP_PAT_QUES_CNT >= 0 THEN
                            VC_DUPL_PAR_BOOLEAN_VAL := 'TRUE';
                            VC_PAR_COMMENTS := 'PARTIAL AOE AVAILABLE FOR DUPLICATE PATIENT';
                        END IF;--<<case_3_and_4>>
                        VN_DUPL_PAT_ID := PAT_ID_REC.PATIENT_ID;
                        SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                                  (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                  ,IC_PROCEDURE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                  ,IN_BATCH_ID        => '100'
                                  ,IC_MESSAGE_TEXT    => 'vc_dup_pat_ques:'||VC_DUP_PAT_QUES||
                                                         ' vn_dup_pat_ques_cnt:'||VN_DUP_PAT_QUES_CNT||
                                                         ' VC_COMMENTS:'||VC_COMMENTS||
                                                         ' VC_PAR_COMMENTS:'||VC_PAR_COMMENTS);
                    END LOOP DUPL_PAT_LOOP;
                    VC_CHK_FOR_EXT_ID := 'Y';
                    IF
                      VC_CHK_FOR_EXT_ID = 'Y' THEN
                      <<EXTERNAL_ID_LOOP>>
                      FOR P_PAT_EXT_ID_REC IN (SELECT DISTINCT P.EXTERNAL_ID
                                                 FROM PATIENT P
                                                WHERE P.ABCDEF_MRN = IN_ABCDEF_MRN
                                                  AND P.EXTERNAL_ID IS NOT NULL)
                      LOOP 
                          INSERT INTO TT_A04_OBX_QUES_ANS_DTL
                          (SELECT IAOBX.MSG_ID, IAOBX.OBSERVATION_IDENTIFIER, IAOBX.OBSERVATION_VALUE, IAM.UOM
                            FROM INTERFACE_A04_OBX_SEGMENT IAOBX, INTERFACE_ADT_AOE_MASTER IAM
                            WHERE IAOBX.OBSERVATION_IDENTIFIER = IAM.QUESTION_CODE
                            AND   (IAOBX.OBSERVATION_DTM  = TO_CHAR(IN_DRAW_DT,'YYYYMMDD')
                                OR IAOBX.OBSERVATION_DTM = TO_CHAR(TO_DATE('2999/12/31','YYYY/MM/DD'),'YYYYMMDD'))
                            AND   IAOBX.MSG_ID IN (SELECT IPID.MSG_ID
                                                     FROM   INTERFACE_A04_PID_SEGMENT IPID
                                                    WHERE   IPID.PATIENT_ID_EXTERNAL  = P_PAT_EXT_ID_REC.EXTERNAL_ID
                                                      AND   IPID.MSG_ID IN (SELECT IMSH.MSG_ID
                                                                             FROM  INTERFACE_A04_MSH_SEGMENT IMSH
                                                                             WHERE (TRIM('W' FROM SUBSTR(IMSH.SENDING_FACILITY,5,LENGTH(IMSH.SENDING_FACILITY))) = IN_ACCOUNT_NUMBER
                                                                                 OR SUBSTR(IMSH.SENDING_FACILITY,2,LENGTH(IMSH.SENDING_FACILITY))    = IN_HLAB_NUM))));
                          BEGIN
                            SELECT STRAGG(SUB3.OBSERVATION_IDENTIFIER), COUNT(OBSERVATION_IDENTIFIER)
                            INTO VC_OBX_QUES, VC_OBX_QUES_CNT
                            FROM (SELECT DISTINCT OBSERVATION_IDENTIFIER
                                  FROM TT_A04_OBX_QUES_ANS_DTL
                                  ORDER BY OBSERVATION_IDENTIFIER)SUB3;
                             IF
                                VC_OBX_QUES = VC_ACTUAL_QUES THEN
                                VC_COMMENTS := 'AOE RECEIVED IN A REJECTED ADT';
                                VC_REJECTED_BOOLEAN_VAL := 'TRUE';
                             ELSIF
                                VC_OBX_QUES != VC_ACTUAL_QUES AND
                                VC_OBX_QUES_CNT > 0 THEN
                                VC_PAR_COMMENTS := 'PARTIAL AOE RECEIVED IN A REJECTED ADT';
                                VC_REJECTED_PAR_BOOLEAN_VAL := 'TRUE';
                             END IF;
                            VN_EXTERNAL_ID := P_PAT_EXT_ID_REC.EXTERNAL_ID;
                        EXCEPTION
                          WHEN NO_DATA_FOUND THEN
                            VC_REJECTED_BOOLEAN_VAL := 'FALSE';
                            VC_REJECTED_PAR_BOOLEAN_VAL := 'FALSE';
                        END;
                         SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                                    (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IC_PROCEDURE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IN_BATCH_ID        => '100'
                                    ,IC_MESSAGE_TEXT    => 'vc_obx_ques:'||VC_OBX_QUES||
                                                           ' vc_obx_ques_cnt:'||VC_OBX_QUES_CNT);
                      END LOOP EXTERNAL_ID_LOOP;
                    END IF;
                END IF;--<<Main_if_block>>
          END LOOP AOE_TEST_LOOP;
      --Returning output as per the execution result.
      IF
         VC_EXACT_BOOLEAN_VAL = 'TRUE' AND
         VC_EXACT_PAR_BOOLEAN_VAL = 'FALSE' THEN
         OV_COMMENTS := VC_COMMENTS;
         VC_DUPL_BOOLEAN_VAL         := NULL;
         VC_DUPL_PAR_BOOLEAN_VAL     := NULL;
         VC_REJECTED_BOOLEAN_VAL     := NULL;
         VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
         VC_RETURN_EXACT_PAT := 'Y';
      ELSIF
         --VC_EXACT_BOOLEAN_VAL = 'TRUE' AND
         VC_EXACT_PAR_BOOLEAN_VAL = 'TRUE' THEN
         OV_COMMENTS := VC_PAR_COMMENTS;
         VC_DUPL_BOOLEAN_VAL         := NULL;
         VC_DUPL_PAR_BOOLEAN_VAL     := NULL;
         VC_REJECTED_BOOLEAN_VAL     := NULL;
         VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
         VC_RETURN_EXACT_PAT := 'Y';
      END IF;
      IF
        VC_RETURN_EXACT_PAT = 'Y' THEN
        --Returning result set (OV_COMMENTS,Question and Answer) for the exact patient.(Case 1 (AOE) and 2 (PARTIAL AOE))
        SELECT MAX (SUB.COUNT_QUES_ANS)
        INTO VN_MAX_COUNT FROM (SELECT COUNT(*) OVER (PARTITION BY EAD.QUESTION_CODE, EAD.ANSWER) AS COUNT_QUES_ANS
                                FROM  EMR_ADTAOE_DTL EAD , INTERFACE_ADT_AOE_MASTER IAM, TEST T
                                WHERE T.TEST_ID = EAD.TEST_ID
                                AND   IAM.TEST_CODE = T.TEST_CODE
                                AND   EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
                                AND   EAD.QUESTION_CODE = IAM.QUESTION_CODE
                                AND   EAD.PATIENT_ID    = IN_PATIENT_ID
                                AND   EAD.FACILITY_ID   = IN_FACILITY_ID
                                AND   (TRUNC(EAD.DRAW_DATE)   = IN_DRAW_DT
                                      OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                                AND   EAD.SOURCE_SYSTEM = IN_REQUISITION_NUMBER) SUB;
         IF
            VN_MAX_COUNT > 1 THEN
            SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                                    (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IN_BATCH_ID        => '100'
                                    ,IC_MESSAGE_TEXT    => 'exact patient duplicate scenario'||' vn_max_count:'||VN_MAX_COUNT);
            OPEN VR_QUES_AND_ANS FOR                                 
            SELECT DISTINCT IAM.QUESTION_CODE,
                  (SELECT DISTINCT CASE
                                   WHEN EAD.ANSWER IS NULL THEN NULL
                                   WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
                                   ELSE TO_CHAR(TRUNC(EAD.ANSWER *  DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
                                   END
                    FROM  EMR_ADTAOE_DTL EAD , TEST T
                    WHERE T.TEST_ID = EAD.TEST_ID
                    AND   IAM.TEST_CODE = T.TEST_CODE
                    AND   EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
                    AND   EAD.QUESTION_CODE = IAM.QUESTION_CODE
                    AND   EAD.PATIENT_ID    = IN_PATIENT_ID
                    AND   EAD.FACILITY_ID   = IN_FACILITY_ID
                    AND   (TRUNC(EAD.DRAW_DATE)    = IN_DRAW_DT
                            OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                    AND   EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
                    AND   EAD.ANSWER IS NOT NULL
                    AND   EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
                    ) AS ANSWER
            FROM INTERFACE_ADT_AOE_MASTER IAM
            WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
            AND IAM.TEST_CODE IN  (SELECT ORD.TEST_CODE
                                     FROM ORDER_REQUISITION_DETAIL ORD
                                    WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
                                                                      FROM ORDER_REQUISITION_HEADER ORH
                                                                     WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER)   
                                    AND EXISTS (SELECT 1 FROM EMR_ADTAOE_DTL EAD1, INTERFACE_ADT_AOE_MASTER IAM1, TEST T1
                                                 WHERE  ORD.TEST_ID = EAD1.TEST_ID
                                                  AND   IAM1.TEST_CODE = T1.TEST_CODE
                                                  AND   EAD1.SOURCE_SYSTEM = IAM1.SOURCE_SYSTEM
                                                  AND   EAD1.QUESTION_CODE = IAM1.QUESTION_CODE
                                                  AND   EAD1.PATIENT_ID    = IN_PATIENT_ID
                                                  AND   EAD1.FACILITY_ID   = IN_FACILITY_ID
                                                  AND   (TRUNC(EAD1.DRAW_DATE)    = IN_DRAW_DT
                                                        OR TRUNC(EAD1.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                                                  AND   EAD1.SOURCE_SYSTEM = IN_CORP_ACRONYM
                                                  AND   EAD1.ANSWER IS NOT NULL
                                                  AND   EAD1.STATUS = DECODE(IAM1.MATCH_TYPE, 'AT', EAD1.STATUS, 'N')));
         ELSIF
           VN_MAX_COUNT = 1 THEN
           SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                                    (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IN_BATCH_ID        => '100'
                                    ,IC_MESSAGE_TEXT    => 'exact patient unique scenario'||' vn_max_count:'||VN_MAX_COUNT);
           OPEN VR_QUES_AND_ANS FOR                                 
           SELECT DISTINCT IAM.QUESTION_CODE,
                  (SELECT DISTINCT CASE
                                   WHEN EAD.ANSWER IS NULL THEN NULL
                                   WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
                                   ELSE TO_CHAR(TRUNC(EAD.ANSWER *  DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
                                   END
                    FROM  EMR_ADTAOE_DTL EAD , TEST T
                    WHERE T.TEST_ID = EAD.TEST_ID
                    AND   IAM.TEST_CODE = T.TEST_CODE
                    AND   EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
                    AND   EAD.QUESTION_CODE = IAM.QUESTION_CODE
                    AND   EAD.PATIENT_ID    = IN_PATIENT_ID
                    AND   EAD.FACILITY_ID   = IN_FACILITY_ID
                    AND   (TRUNC(EAD.DRAW_DATE)    = IN_DRAW_DT
                            OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                    AND   EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
                    AND   EAD.ANSWER IS NOT NULL
                    AND   EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
                    ) AS ANSWER
            FROM INTERFACE_ADT_AOE_MASTER IAM
            WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
            AND IAM.TEST_CODE IN  (SELECT ORD.TEST_CODE
                                     FROM ORDER_REQUISITION_DETAIL ORD
                                    WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
                                                                      FROM ORDER_REQUISITION_HEADER ORH
                                                                     WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER));
         END IF;                           
         OR_QUES_AND_ANS := VR_QUES_AND_ANS;
        SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                      (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IN_BATCH_ID        => '100'
                      ,IC_MESSAGE_TEXT    => 'vc_exact_boolean_val:'||VC_EXACT_BOOLEAN_VAL||
                                             ' vc_exact_par_boolean_val:'||VC_EXACT_PAR_BOOLEAN_VAL||
                                             ' OV_COMMENTS:'||OV_COMMENTS);
      END IF;               
      IF
          VC_DUPL_BOOLEAN_VAL = 'TRUE' AND
          VC_DUPL_PAR_BOOLEAN_VAL = 'FALSE' THEN
          OV_COMMENTS := VC_COMMENTS;
          VC_EXACT_BOOLEAN_VAL        := NULL;
          VC_EXACT_PAR_BOOLEAN_VAL    := NULL;
          VC_REJECTED_BOOLEAN_VAL     := NULL;
          VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
          VC_RETURN_DUPL_PAT := 'Y';
      ELSIF
         --VC_DUPL_BOOLEAN_VAL = 'TRUE' AND
         VC_DUPL_PAR_BOOLEAN_VAL = 'TRUE' THEN
         OV_COMMENTS := VC_PAR_COMMENTS;
         VC_EXACT_BOOLEAN_VAL        := NULL;
         VC_EXACT_PAR_BOOLEAN_VAL    := NULL;
         VC_REJECTED_BOOLEAN_VAL     := NULL;
         VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
         VC_RETURN_DUPL_PAT := 'Y';
      END IF;
      IF
        VC_RETURN_DUPL_PAT = 'Y' THEN
        --Returning result set (OV_COMMENTS,Question and Answer) for the duplicate patient.(Case 3 (AOE) and 4 (PARTIAL AOE))
        SELECT MAX (SUB.COUNT_QUES_ANS)
        INTO VN_MAX_COUNT FROM (SELECT COUNT(*) OVER (PARTITION BY EAD.QUESTION_CODE, EAD.ANSWER) AS COUNT_QUES_ANS
                                FROM  EMR_ADTAOE_DTL EAD , INTERFACE_ADT_AOE_MASTER IAM, TEST T
                                WHERE T.TEST_ID = EAD.TEST_ID
                                AND   IAM.TEST_CODE = T.TEST_CODE
                                AND   EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
                                AND   EAD.QUESTION_CODE = IAM.QUESTION_CODE
                                AND   EAD.PATIENT_ID    = VN_DUPL_PAT_ID
                                AND   EAD.FACILITY_ID   = IN_FACILITY_ID
                                AND   (TRUNC(EAD.DRAW_DATE)   = IN_DRAW_DT
                                      OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                                AND   EAD.SOURCE_SYSTEM = IN_REQUISITION_NUMBER) SUB;
         IF
            VN_MAX_COUNT > 1 THEN
            SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                                    (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IN_BATCH_ID        => '100'
                                    ,IC_MESSAGE_TEXT    => 'duplicate patient duplicate scenario'||' vn_max_count:'||VN_MAX_COUNT);
            OPEN VR_QUES_AND_ANS FOR                                 
            SELECT DISTINCT IAM.QUESTION_CODE,
                  (SELECT DISTINCT CASE
                                   WHEN EAD.ANSWER IS NULL THEN NULL
                                   WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
                                   ELSE TO_CHAR(TRUNC(EAD.ANSWER *  DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
                                   END
                    FROM  EMR_ADTAOE_DTL EAD , TEST T
                    WHERE T.TEST_ID = EAD.TEST_ID
                    AND   IAM.TEST_CODE = T.TEST_CODE
                    AND   EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
                    AND   EAD.QUESTION_CODE = IAM.QUESTION_CODE
                    AND   EAD.PATIENT_ID    = VN_DUPL_PAT_ID
                    AND   EAD.FACILITY_ID   = IN_FACILITY_ID
                    AND   (TRUNC(EAD.DRAW_DATE)    = IN_DRAW_DT
                            OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                    AND   EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
                    AND   EAD.ANSWER IS NOT NULL
                    AND   EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
                    ) AS ANSWER
            FROM INTERFACE_ADT_AOE_MASTER IAM
            WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
            AND IAM.TEST_CODE IN  (SELECT ORD.TEST_CODE
                                     FROM ORDER_REQUISITION_DETAIL ORD
                                    WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
                                                                      FROM ORDER_REQUISITION_HEADER ORH
                                                                     WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER)   
                                    AND EXISTS (SELECT 1 FROM EMR_ADTAOE_DTL EAD1, INTERFACE_ADT_AOE_MASTER IAM1, TEST T1
                                                 WHERE  ORD.TEST_ID = EAD1.TEST_ID
                                                  AND   IAM1.TEST_CODE = T1.TEST_CODE
                                                  AND   EAD1.SOURCE_SYSTEM = IAM1.SOURCE_SYSTEM
                                                  AND   EAD1.QUESTION_CODE = IAM1.QUESTION_CODE
                                                  AND   EAD1.PATIENT_ID    = VN_DUPL_PAT_ID
                                                  AND   EAD1.FACILITY_ID   = IN_FACILITY_ID
                                                  AND   (TRUNC(EAD1.DRAW_DATE)    = IN_DRAW_DT
                                                        OR TRUNC(EAD1.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                                                  AND   EAD1.SOURCE_SYSTEM = IN_CORP_ACRONYM
                                                  AND   EAD1.ANSWER IS NOT NULL
                                                  AND   EAD1.STATUS = DECODE(IAM1.MATCH_TYPE, 'AT', EAD1.STATUS, 'N')));
         ELSIF
           VN_MAX_COUNT = 1 THEN
            SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                                    (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                                    ,IN_BATCH_ID        => '100'
                                    ,IC_MESSAGE_TEXT    => 'duplicate patient unique scenario'||' vn_max_count:'||VN_MAX_COUNT);
            OPEN VR_QUES_AND_ANS FOR                                 
            SELECT DISTINCT IAM.QUESTION_CODE,
                  (SELECT DISTINCT CASE
                                   WHEN EAD.ANSWER IS NULL THEN NULL
                                   WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
                                   ELSE TO_CHAR(TRUNC(EAD.ANSWER *  DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
                                   END
                    FROM  EMR_ADTAOE_DTL EAD , TEST T
                    WHERE T.TEST_ID = EAD.TEST_ID
                    AND   IAM.TEST_CODE = T.TEST_CODE
                    AND   EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
                    AND   EAD.QUESTION_CODE = IAM.QUESTION_CODE
                    AND   EAD.PATIENT_ID    = VN_DUPL_PAT_ID
                    AND   EAD.FACILITY_ID   = IN_FACILITY_ID
                    AND   (TRUNC(EAD.DRAW_DATE)    = IN_DRAW_DT
                            OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
                    AND   EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
                    AND   EAD.ANSWER IS NOT NULL
                    AND   EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
                    ) AS ANSWER
            FROM INTERFACE_ADT_AOE_MASTER IAM
            WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
            AND IAM.TEST_CODE IN  (SELECT ORD.TEST_CODE
                                     FROM ORDER_REQUISITION_DETAIL ORD
                                    WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
                                                                      FROM ORDER_REQUISITION_HEADER ORH
                                                                     WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER));
         END IF; 
        OR_QUES_AND_ANS := VR_QUES_AND_ANS;
        SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                      (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                      ,IN_BATCH_ID        => '100'
                      ,IC_MESSAGE_TEXT    => 'vc_dup_pat_ques:'||VC_DUP_PAT_QUES||
                                             ' vc_dupl_boolean_val:'||VC_DUPL_BOOLEAN_VAL||
                                             ' vc_dupl_par_boolean_val:'||VC_DUPL_PAR_BOOLEAN_VAL||
                                             ' OV_COMMENTS:'||OV_COMMENTS);
      END IF;               
      IF
         VC_REJECTED_BOOLEAN_VAL = 'TRUE' AND
         VC_REJECTED_PAR_BOOLEAN_VAL = 'FALSE' THEN
         OV_COMMENTS := VC_COMMENTS;
         VC_EXACT_BOOLEAN_VAL        := NULL;
         VC_EXACT_PAR_BOOLEAN_VAL    := NULL;
         VC_DUPL_BOOLEAN_VAL         := NULL;
         VC_DUPL_PAR_BOOLEAN_VAL     := NULL;
         VC_RETURN_REJECT_PAT := 'Y';
      ELSIF
         --VC_REJECTED_BOOLEAN_VAL = 'FALSE' AND
         VC_REJECTED_PAR_BOOLEAN_VAL = 'TRUE' THEN
         OV_COMMENTS := VC_PAR_COMMENTS;
         VC_EXACT_BOOLEAN_VAL        := NULL;
         VC_EXACT_PAR_BOOLEAN_VAL    := NULL;
         VC_DUPL_BOOLEAN_VAL         := NULL;
         VC_DUPL_PAR_BOOLEAN_VAL     := NULL;
         VC_RETURN_REJECT_PAT := 'Y';
      ELSIF
         VC_REJECTED_BOOLEAN_VAL = 'FALSE' AND
         VC_REJECTED_PAR_BOOLEAN_VAL = 'FALSE' THEN
         --Returning result set (OV_COMMENTS) for the rejected ADT.(Case 7)
         OV_COMMENTS := 'AOE NOT RECEIVED IN ADT';
         OR_QUES_AND_ANS := NULL;
         SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                        (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IN_BATCH_ID        => '100'
                        ,IC_MESSAGE_TEXT    => 'vc_obx_ques:'||VC_OBX_QUES||
                                               ' vc_rejected_boolean_val:'||VC_REJECTED_BOOLEAN_VAL||
                                               ' vc_rejected_par_boolean_val:'||VC_REJECTED_PAR_BOOLEAN_VAL||
                                               ' OV_COMMENTS:'||OV_COMMENTS);
         VC_EXACT_BOOLEAN_VAL        := NULL;
         VC_EXACT_PAR_BOOLEAN_VAL    := NULL;
         VC_DUPL_BOOLEAN_VAL         := NULL;
         VC_DUPL_PAR_BOOLEAN_VAL     := NULL;
      END IF;
      IF
        VC_RETURN_REJECT_PAT = 'Y' THEN
        --Returning result set (OV_COMMENTS,Question and Answer) for the rejected ADT.(Case 5 (AOE) and 6 (PARTIAL AOE))
        --In case of multiple external id with same patient, facility and draw date; the lastest record should be picked.
        SELECT MAX(MSG_ID) INTO VN_MAX_MSG_ID FROM TT_A04_OBX_QUES_ANS_DTL;
        OPEN VR_QUES_AND_ANS FOR
        SELECT DISTINCT IAM.QUESTION_CODE,
                       (SELECT DISTINCT
                         CASE
                            WHEN TOBX.OBSERVATION_VALUE IS NULL THEN NULL
                            WHEN LENGTH(TRIM(TRANSLATE(TOBX.OBSERVATION_VALUE, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN TOBX.OBSERVATION_VALUE
                            ELSE TO_CHAR(TRUNC(TOBX.OBSERVATION_VALUE *  DECODE(UPPER(TOBX.UOM), 'KGS', 2.20462,1),2))
                         END
                         FROM TT_A04_OBX_QUES_ANS_DTL TOBX
                        WHERE TOBX.OBSERVATION_IDENTIFIER = IAM.QUESTION_CODE
                          AND TOBX.MSG_ID = VN_MAX_MSG_ID) AS ANSWER
         FROM INTERFACE_ADT_AOE_MASTER IAM
        WHERE SOURCE_SYSTEM = IN_CORP_ACRONYM;
        OR_QUES_AND_ANS := VR_QUES_AND_ANS;
        SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                        (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IN_BATCH_ID        => '100'
                        ,IC_MESSAGE_TEXT    => 'vc_rejected_boolean_val:'||VC_REJECTED_BOOLEAN_VAL||
                                               ' vc_rejected_par_boolean_val:'||VC_REJECTED_PAR_BOOLEAN_VAL||
                                               ' OV_COMMENTS:'||OV_COMMENTS);
      END IF;
       SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
                        (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IN_BATCH_ID        => '100'
                        ,IC_MESSAGE_TEXT    => 'End of the procedure with Patient_Id:'||IN_PATIENT_ID||' Facility_Id:'||IN_FACILITY_ID||
                                               ' Draw_Dt:'||IN_DRAW_DT||' Requisition_Number:'||IN_REQUISITION_NUMBER||' Corp_Acronym:'||IN_CORP_ACRONYM||
                                               ' ABCDEF_Mrn:'||IN_ABCDEF_MRN||' Account_Number:'||IN_ACCOUNT_NUMBER||' Hlab_Num:'||IN_HLAB_NUM);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        SPL_SPN_ERROR_LOGGING_SPK.ERROR_PROC
                        (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IN_BATCH_ID        => '100'
                        ,IC_MESSAGE_TEXT    => SQLERRM);
      WHEN OTHERS THEN
        SPL_SPN_ERROR_LOGGING_SPK.ERROR_PROC
                        (IC_PACKAGE_NAME    => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IC_PROCEDURE_NAME  => 'SPL_SPN_MISSING_EMR_AOE_DTL'
                        ,IN_BATCH_ID        => '100'
                        ,IC_MESSAGE_TEXT    => SQLERRM);
    END SPL_SPN_MISSING_EMR_AOE_DTL;
    Regards,
    BS2012.

    Hey Guys,
    I'm sorry, that I troubled you all. But I found the issue and solved it.
    The actual problem is residing at that max of that partition by query. I had a misconception that this query will always return a value which is positive number like 1,2 etc.
    But sometimes it's returning null as well. So the ref cursor is fetching nothing. Now I've modified my code and everything is working fine. Thanks for your help and support.
    Regards,
    BS2012.

  • Unit Test Validation for Output Ref Cursor Not Working

    Here is the problem:
    I have a stored procedure as follows:
    CREATE OR REPLACE
    PROCEDURE usp_GetEmployee(
    p_employeeId IN NUMBER,
    cv_employee OUT Sys_RefCursor )
    AS
    BEGIN
    OPEN cv_employee FOR SELECT * FROM employees WHERE employee_id=p_employeeid;
    END usp_GetEmployee;
    For this, I am implementing a unit test.
    * In the "Select Parameters" step, I am unchecking the "Test Result" check box for the cursor OUT variable.
    * In the "Specify Validations" step, I am choosing "Boolean Function" and putting the following PL/SQL code:
    DECLARE
    emp_rec {cv_employee$}%rowtype;
    BEGIN
    FETCH {cv_employee$} INTO emp_rec;
    IF {cv_employee$}%FOUND THEN
    RETURN TRUE;
    ELSE
    RETURN FALSE;
    END IF;
    RETURN TRUE;
    END;
    But, when I try to execute this Test, I get the following error:
    Validation Boolean function failed: Unable to convert <oracle.jdbc.driver.OracleResultSetImpl@4f0617> to REF CURSOR.
    If I run in the debug mode, I get the following content in a dialog box:
    The following procedure was run.
    Execution Call
    BEGIN
    "ARCADMIN"."USP_GETEMPLOYEE"(P_EMPLOYEEID=>:1,
    CV_EMPLOYEE=>:2);
    END;
    Bind variables used
    :1 NUMBER IN 1001
    :2 REF CURSOR OUT (null)
    Execution Results
    ERROR
    CV_EMPLOYEE : Expected: [Any value because apply check was cleared], Received: [EMPLOYEE_ID                             COMMISSION_PCT                          SALARY                                 
    1001                                    0.2                                     8400                                   
    Validation Boolean function failed: Unable to convert <oracle.jdbc.driver.OracleResultSetImpl@31dba0> to REF CURSOR.
    Please suggest how to handle this issue.
    Thanks,
    Rahul

    979635 wrote:
    But, when I try to execute this Test, I get the following error:
    Validation Boolean function failed: Unable to convert <oracle.jdbc.driver.OracleResultSetImpl@4f0617> to REF CURSOR.
    If I run in the debug mode, I get the following content in a dialog box:
    The following procedure was run.
    Execution Call
    BEGIN
    "ARCADMIN"."USP_GETEMPLOYEE"(P_EMPLOYEEID=>:1,
    CV_EMPLOYEE=>:2);
    END;
    Bind variables used
    :1 NUMBER IN 1001
    :2 REF CURSOR OUT (null)
    Try explicity declaring the ref cursor instead of using a bind variable, something like (untested)
    begin
      foo sys_refcurosr;
    begin
      test_procedure(foo);
    end;Alternately, in SQL*PLUS use the DEFINE command to ste a named bind variable to type REFCURSOR and use the named bind variable in your test
    Edited by: riedelme on Jan 23, 2013 7:10 AM

  • Using CRUD procedures to update data and ref cursors to return data

    Hi:
    I am currently evaluating Apex 3.x to replace an existing app that uses lots of procedures to update and return data.
    1. Is it possible to return data from a function that returns a cursor (or from a procedure that has an input/output ref cursor parameter for that matter) ? Example: Let's say I have the following function in a package:
    function get_data return sys_refcursor
    is
    l_cursor sys_refcursor;
    begin
    open l_cursor for select sysdate as field from sys.dual;
    return l_cursor;
    end;
    Can I add a page with a table that is populated based on this function? Based on my research it is not possible, but I want an APEX expert to confirm it
    2. The old application uses CRUD procedures to update date, that is for each table there are 3 procedures, insert update and delete. Question: is it possible to channel all the update, inserts and deletes through these procedures? Furthermore, in lots of cases I use sequences to populate the primary keys, and the new value is returned as output parameter. Can I retrieve the output value and use it maybe in the next page I am branching to?
    In the samples that I've seen the same form is used for insert and update. How do I distinguish between the two modes?
    3. Can you please point me to some samples that show how to do 1 & 2. The standard samples that I've seen use the automatic row processing.
    4. Could you please recommend some good books about Apex or HTML db? I found the documentation unintuitive. It is hard to picture quickly how things tie together by reading this documention. I wish the documentation was more task oriented and presented 'how to...' implement generic patterns used in web apps.
    Thank you in advance

    Hi guys
    Check out the last 2 posts in this thread for ideas on how to implement 1.
    Report on user data from LDAP
    Varad

  • Ref cursor not accepted

    Hi,
    When I try to compile the following procedure:
    Declare
    query_str VARCHAR2(4000) := 'SELECT STREET_NAME||chr(09)||ADDRESS.HOUSE_NR||chr(09)||ADDRESS.HOUSE_CHAR||chr(09)||
    ADDRESS.HOUSE_NR_TO_BY||chr(09)||ADDRESS.HOUSE_NR_EXTRA||chr(09)||ADDRESS.POSTALCODE||chr(09)||PLACE_NAME ADR
    FROM PREVENT.ADDRESS, PREVENT.PLACE_STREET, PREVENT.ADDRESS_DISTRICT
    WHERE PLACE_STREET_ID=ID_PLACE_STREET
    AND ADDRESS_ID=ID_ADDRESS
    AND DISTRICT_ID=P_DISTRICT_ID';
    TYPE cur_typ IS REF CURSOR;
    c cur_typ;
    DECLARE
    OPEN c FOR query_str;-- USING inv_num;
    LOOP
    null;
    EXIT WHEN c%NOTFOUND;
    -- process row here
    END LOOP;
    CLOSE c;
    END;
    forms says:
    encountered the symbol 'query_str' when expecting 'select'
    When I put the procedure in the database it compiles fine.
    Is there maybe another way to approach this in forms?
    Thanx,
    Pim

    Hi,
    Thanx for the fast replies.
    Based on exec_sql I build the following:
    DECLARE
    query_str VARCHAR2(4000) := 'SELECT STREET_NAME||chr(09)||ADDRESS.HOUSE_NR||chr(09)||ADDRESS.HOUSE_CHAR||chr(09)||
    ADDRESS.HOUSE_NR_TO_BY||chr(09)||ADDRESS.HOUSE_NR_EXTRA||chr(09)||ADDRESS.POSTALCODE||chr(09)||PLACE_NAME ADR
    FROM PREVENT.ADDRESS, PREVENT.PLACE_STREET, PREVENT.ADDRESS_DISTRICT
    WHERE PLACE_STREET_ID=ID_PLACE_STREET
    AND ADDRESS_ID=ID_ADDRESS
    AND DISTRICT_ID=P_DISTRICT_ID';
    orderby_str varchar(200) := ' ORDER BY STREET_NAME, HOUSE_NR;';
    TYPE cur_typ IS REF CURSOR;
    c cur_typ;
    BEGIN
    connection_id EXEC_SQL.CONNTYPE;
    cursorID EXEC_SQL.CURSTYPE;
    exec_id PLS_INTEGER;
    l_adr varchar2(4000);
    set_application_property(CURSOR_STYLE, 'BUSY');
    --Create exportfile as defined by user parameters 
    export_file := TEXT_IO.FOPEN(:SELECTION.PATH_AND_FILE_NAME,'W');
    IF (:SELECTION.BUILDING_TYPE <>'<<Selecteer>>')
    THEN
    query_str := query_str||' and
    building_type_id='||:selection.temp_lov_id_buildingtype;
    SHOW_ERROR_ALERT('ERROR',substr(query_str,250));
    END IF;
    IF (:SELECTION.BUILDING_USAGE <>'<<Selecteer>>')
    THEN
    query_str := query_str||' and
    building_usage_id='||:selection.temp_lov_id_buildingusage;
    SHOW_ERROR_ALERT('ERROR',substr(query_str,250));
    END IF;
    IF (:SELECTION.BUILDING_PROPERTY_3 <>'<<Selecteer>>')
    THEN
    query_str := query_str||' and
    BUILDING_PROPERTY_3_id='||:selection.temp_lov_id_BUILDINGPROPERTY3;
    SHOW_ERROR_ALERT('ERROR',substr(query_str,250));
    END IF;
    IF (:SELECTION.BUILDING_PROPERTY_4 <>'<<Selecteer>>')
    THEN
    query_str := query_str||' and
    BUILDING_PROPERTY_4_id='||:selection.temp_lov_id_BUILDINGPROPERTY4;
    SHOW_ERROR_ALERT('ERROR',substr(query_str,250));
    END IF;
    query_str := query_str||orderby_str;
    SHOW_ERROR_ALERT('ERROR',substr(query_str,250));
    connection_id := EXEC_SQL.OPEN_CONNECTION('PREVENT/*****@prcl');
    SHOW_ERROR_ALERT('ERROR','connectie made');
    cursorID := EXEC_SQL.OPEN_CURSOR(connection_id);
    SHOW_ERROR_ALERT('ERROR','cursor opened');
    EXEC_SQL.PARSE(connection_id, cursorID, query_str, exec_sql.V7);
    SHOW_ERROR_ALERT('ERROR','geparsed');
    EXEC_SQL.DEFINE_COLUMN(connection_id, cursorID, 1,l_adr, 4000);
    SHOW_ERROR_ALERT('ERROR','column defined');
    exec_id := EXEC_SQL.EXECUTE(connection_id, cursorID);
    SHOW_ERROR_ALERT('ERROR','EXECUTE SQL');
    SHOW_ERROR_ALERT('ERROR','Begin loop');
    WHILE (EXEC_SQL.FETCH_ROWS(connection_id, cursorID) > 0 ) LOOP
    EXEC_SQL.COLUMN_VALUE(connection_id, cursorID, 1,l_adr);
    TEXT_IO.PUT_LINE(export_file, l_adr);
    nr_of_addresses:=nr_of_addresses+1;
    END LOOP;
    SHOW_ERROR_ALERT('ERROR','UIT loop');
    EXEC_SQL.CLOSE_CURSOR(connection_id, cursorID);
    EXEC_SQL.CLOSE_CONNECTION(connection_id);
    TEXT_IO.FCLOSE(export_file);
    SHOW_NOTE_ALERT('Aanmaken exportbestand','Het aanmaken van exportbestand '
    ||UPPER(:SELECTION.PATH_AND_FILE_NAME)||' is voltooid. Totaal: '||nr_of_addresses||' adressen.');
    go_item('SELECTION.EXPORT');
    set_application_property(CURSOR_STYLE, 'DEFAULT');
    END;
    After the message 'cursor openes' the form hangs. It seems like it doesn't come back from parsing. I tested the sql statement, it's very fast.
    Does anybody know of a reason why the parsing results in a hang.
    Thanx,
    Pim

  • RV_PRICE_PRINT_HEAD not returning all output conditions

    Hi experts,
    I am using the FM 'RV_PRICE_PRINT_HEAD' to get the header conditions but it is returning only specific condition types. I need all the header conditions maintained in the sales order.
    Is it possible to get all conditions through this FM ?
    Help me on this issue.
    Thanks & Regards,
    Karthik

    Hi Karthi,
    as documented this function module will return only conditions that are flagged for print output in calculation scheme.
    What is your requirement?
    Regards,
    Clemens

  • MS Access, ODBC and SPs returning ref cursor

    I have some functions and procedures in a package returning ref cursors that work fine in my C++ batch applications. I would like for the GUI to be able to call these as well.
    Unfortunately, we are using Access as the front end (for now), and we have not been able to get the ref cursors to work. Is this supported? We are using Oracle 8.0.5 on Solaris, and our clients is Access 97 on NT using Intersolv's ODBC driver.
    My procedure looks something like:
    package jec is
    procedure open_sale_cur(
    p_client_id number,
    sale_curvar out sale_curtype)
    is begin
    open sale_curtype for select ... ;
    end;
    end;
    And the Access code looks like this:
    strSql = "begin jec.open_sale_cur(27, ?); end;"
    qdfTemp = conMain.CreateQueryDef("", strSql)
    qdfTemp.Parameters(0).Direction = dbParamOutput
    qdfTemp.Execute()
    This is the error when Execute() is called:
    PLS-00306: wrong number or types of arguments in call to 'OPEN_SALE_CUR'
    I am not an Access programmer; I am simply passing along this information. Any help would be greatly appreciated.

    We tried the {call...} syntax originally, but when we use it, we get an Oracle syntax error for the statement
    SELECT * FROM {call ...}
    Apparently Access prepends "SELECT..." before passing the SQL text to Oracle.
    This is also the case for procedures with normal scalars, such as numbers, returned as OUT values. When we use anon PL/SQL syntax and "?" placeholders with such procedures, they work. When we use {call ...} syntax or omit OUT placeholders, they do not.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Justin Cave ([email protected]):
    I suspect that you want to simply execute the statement
    strSql = {call open_sale_cur( 27 )}
    The ODBC driver will automatically figure out that there's an output parameter which is a ref cursor and return that as the result set. Note that you may want to download the latest 8.0.5 ODBC driver (8.0.5.10 I believe) if there are any problems.
    Justin<HR></BLOCKQUOTE>
    null

  • Returning a Ref cursor as an OUT Parameter

    Hi Guys
    I have defined 2 Types and 2 Ref cursors as shown below.I have written a procedure having 2 IN and 2 OUT parameters which are of type Ref cursors and return records to the calling client. My question is how can i test for the output of the two cursors here in pl/sql?.. also i should not close the sursors.. right?..its the job of the calling client as per my knowledge....Please suggest
    TYPE type_dept_Rec IS RECORD(deptNo varchar2);
    TYPE type_prod_Rec IS RECORD(prodType varchar2);
    TYPE deptCursor IS REF CURSOR RETURN type_dept_Rec;
    TYPE prodCursor IS REF CURSOR RETURN type_prod_Rec;
    PROCEDURE TEST (pinCode IN varchar2, prodType IN number, deptCursor OUT deptType, productCursor OUT deptType) IS
    BEGIN
    OPEN deptCursor FOR SELECT
    deptNo
    from
    DEPT
    where
    pinCode = pinCode;
    OPEN productCursor FOR SELECT
    prodCode
    from
    PROD
    where
    prodType = prodType;
    end;

    A Correction to the above code snippet
    Hi Guys
    I have defined 2 Types and 2 Ref cursors as shown below.I have written a procedure having 2 IN and 2 OUT parameters which are of type Ref cursors and return records to the calling client. My question is how can i test for the output of the two cursors here in pl/sql?.. also i should not close the sursors.. right?..its the job of the calling client as per my knowledge....Please suggest
    TYPE type_dept_Rec IS RECORD(deptNo varchar2);
    TYPE type_prod_Rec IS RECORD(prodType varchar2);
    TYPE deptCursor IS REF CURSOR RETURN type_dept_Rec;
    TYPE prodCursor IS REF CURSOR RETURN type_prod_Rec;
    PROCEDURE TEST (pinCode IN varchar2, prodType IN number, deptCursor OUT deptCursor, productCursor OUT prodCursor) IS
    BEGIN
    OPEN deptCursor FOR SELECT
    deptNo
    from
    DEPT
    where
    pinCode = pinCode;
    OPEN productCursor FOR SELECT
    prodCode
    from
    PROD
    where
    prodType = prodType;
    end

  • Forms Data-Block based on stored procedures - REF CURSOR feature NOT FUNCTIONING

    This topic is related to another topic in this forum titled "FORMS HOW TO SET QUERY SOURCE ARGUMENTS??" I posted my message there as well. I am posting as a NEW TOPIC so that it catches the attention of Oracle Support.
    I built a data form based on a stored procedure and REF CURSOR IN OUT parameter.
    My procedure takes a IN parameter to fill in the criteria for the OPEN <cursor_variable> select ... where ... statement.
    In the Value setting of the Query source Arguments , I set the VALUE to ":BLOCK_NAME.ITEM_NAME" at design time to supply the input value to the procedure. this works to the extent of making available the form item value to the stored procedure parameter. I verified this by doing an insert into some debug table , of the incoming parameter value inside my stored procedure.
    The cursor gets opened properly into the REF cursor variable. I verified this by fetching a record into a local variable and inserting the value into a debug table again in the stored procedure.
    (I took care to close and re-open the REF cursor variable again - so that the front-end can continue to fetch it from the first record. )
    ***** PROBLEM **************
    But the front end forms runtime is giving me a FRM-40301 - query returned no records even though the REF cursor is returned properly opened.
    Did anybody else face the same problem ??
    Please post what you found.
    Thanks,
    Shankaran
    null

    This topic is discussed at length in another thread "How Set Value For Query DataSource Arguments?"
    But I am posting the findings here as well.
    THIS TOPIC IS CLOSED.
    My Bad. The problem Cause : I did not include all columns in the
    cursor rowtype in the Data-block. In the wizard for the data block , I selected ONLY the columns that I needed. But I was doing a Select * from <my_table> in my open cursor <Cursor-Variable> .... The <Cursor Variable>
    itself was declared <my_table>%rowtype
    FIX : The Data Block structure (columns included as items) should match the cursor record Structure. One may or may not
    display all the columns in the LAYOUT though.
    But I don't understand why it gives such a misleading message like FRM-40301 Query retrieved no records. Oracle Team fix it.
    Hope this helps people who face the same problem.
    Thanks,

  • How to return integer used wit DMBS_SQL as ref cursor ?

    I am trying to return a ref cursor form a procedure to be used by xsql to output hierarchical XML.
    I created the query using the DBMS_SQL package, did an OPEN_CURSOR and then PARSE.
    Can I, and if so how, return the integer from the PARSE as a ref cursor out of my procedure ? According to the docs the integer in the PARSE is the ID number for a cursor.
    thanks,
    Reinier

    I suspect that you are a little confused. I doubt that what you are asking for is what you really need. I believe you want the contents of a ref cursor, not an integer that is the cursor id. Since you are using Oracle 8i, as mentioned in your other post, you don't need DBMS_SQL; You just need to open a ref cursor dynmacially. Please see my response to your other post:
    Re: Error while compiling form in AS 10g  deployed on Linux

  • Return XML from REF CURSOR

    It appears to be fairly straight-forward to get XML from a SQL query using the XML SQL Utility.
    Is it possible to use this utility (or another) to get XML from a cursor variable as well? I would like to generate overloaded get_xml functions in a PL/SQL package that will accept either SQL or a weak type REF CURSOR and return XML.

    Thanks for the help. Actually, I just bought your book and was getting ready to do some research. This should get me pointed in the right direction.
    Does the PL/SQL API lack this functionality? I wasn't sure whether to implement this in PL/SQL or Java, but the decision may be made for me...

  • Ref cursor returns login ids

    I have this ref cursor that returns login ids from a procedure.
    While I can define the ref cursor as sys_refcursor; I want to use strongly typed ref cursor ( for improved readabilty of code).
    But I guess I can not define the cursor that returns %type.
    e.g. Type return_login_id IS REF CURSOR return tab1.login_id%type;
    On compilation the package threw an error saying the return type should be record.
    I need to define a record with one column and use that as return type ?
    any other way around ?
    TIA
    S

    Btw, why you need to use REF Cursor?
    You can use just a cursor:
    SQL> declare
      2  cursor c1 is select empid from emp;
      3  TYPE my_id IS TABLE OF emp.empid%type;
      4  myid my_id := my_id();
      5  BEGIN
      6  OPEN c1;
      7  FETCH c1 BULK COLLECT INTO myid;
      8  CLOSE c1;
      9  END;
    10  /
    PL/SQL procedure successfully completed.
    SQL>

  • Can the return from xsql:ref-cursor-function be saved & looped through XSQL?

    If <xsql:ref-cursor-function> returns one field for a number of rows, is there a way to save those values and loop through the data retrieved for other query process within XSQL? Any example?
    Thanks.
    null

    You have a couple of options.
    You can process the XML returned by <Xsql:ref-cursor-function> as the normal part of XSLT processing, or you can write a custom action handler that aggregates the action handler for <xsql:ref-cursor-function> and then uses DOM to operate on the return value.
    Search the Online XSQL Pages Documentation for the term "MyIncludeXSQLHandler" for some sample code that illustrates building a customer action handler that aggregates one of the built-in handlers.

Maybe you are looking for

  • How do I install the operating system on a store bought hard drive?

    I purchased a hard drive from best buy to replace the one that died on my hp G60-501.  When I try to run the system install disk, it runs through the entire thing (around 1.5 hours).  When it finally finishes, it says that it needs to be reinstalled.

  • Can Time Machine back up an external hard drive plugged into a Time Capsule

    I have iTunes and iPhoto libraries that have outgrown the hard drive on my laptop so I've moved them on to an external hard drive. Since I'd like to move around the house with the laptop, I've plugged the external hard drive in to the Time Capsule so

  • Standard Manager jobs say Running Normal but nothing happening

    Environment is R12.1.3 running on RH Linux 64-bit.My Payable Contact indicated a nightly batch job 'Invoice Validation' was not completing and if I check Std Manager all it shows is 'Running Normal'. If you check the log it doesn't show any real info

  • What happened to file saving options in Lion?!

    I recently upgraded my Mac to OS X Lion and Photoshop CS5 seems to be working normally, albeit a little sluggishly, since the upgrade. However, when I create a new Photoshop file, create some layers, then "Save As", all my normal format options are m

  • AOL Mail

    One thing I miss about my AOL mail account with Apple is that I can't tell when someone picks up the mail I sent them. That would be awesome if Apple would make that available in my mail account in a separate column. Thanks !