LIKE with varying number of values

From: Dereck <dietzdl_at_ameritech.net>
Date: Sun, 19 Jul 2009 12:08:21 -0700 (PDT)
Message-ID: <5add2f84-f4ce-4462-b2b0-a92db658782f_at_k6g2000yqn.googlegroups.com>



Oracle 10.2.0.3.0
Windows 2003 Server

I have a cursor defined as follows which I can use in a number of different procedures:

    CURSOR cr_cursor( p_start_date IN DATE,
                      p_end_date   IN DATE,
                      p_tab        IN t_cpt_hcpcs_tab,
                      p_service    IN tmp$_measures.service_type_code
%TYPE )
        RETURN tmp$_measures$ROWTYPE
    IS
      SELECT C_ADMIN_DATA,
             NULL,
             NULL,
             SUBSTR(mbr_key,1,27),
             mbr_sys_key,
             person_id,
             TRUNC(srv_dt_from),
             p_service
        FROM v_claim
       WHERE srv_dt_from BETWEEN p_start_date AND p_end_date
         AND person_id > 0
         AND cpt_hcpcs IN ( SELECT column_value FROM TABLE(p_tab) )
      UNION ALL
        SELECT C_STATE_HISTORICAL_CLAIM,
               NULL,
               NULL,
               SUBSTR(mbr_key,1,27),
               mbr_sys_key,
               person_id,
               TRUNC(srv_dt_from),
               p_service
          FROM v_claim_external
         WHERE srv_dt_from BETWEEN p_start_date AND p_end_date
           AND person_id > 0
           AND cpt_hcpcs IN ( SELECT column_value FROM TABLE(p_tab) );

I would like to figure out a way where I could convert the cursor below to where I can
reuse it from different procedures using a varying number of procedure codes similar to
how the above cursor works. The only problem is that if I try the same syntax as above
I get a too many values retrieved error from using the LIKE.

      CURSOR cr_cursor( p_start_date IN DATE,
                        p_end_date   IN DATE )
          RETURN tmp$_measures%ROWTYPE
      IS
        SELECT C_ADMIN_DATA,
               NULL,
               NULL,
               SUBSTR(mbr_key,1,27),
               mbr_sys_key,
               person_id,
               TRUNC(srv_dt_from),
               C_DIPTHERIA
          FROM v_claim
         WHERE srv_dt_from BETWEEN p_start_date AND p_end_date
           AND person_id > 0
           AND (
                    proc_i_1 LIKE '9936%'
                 OR proc_i_1 LIKE '9939%'
                )
        UNION ALL
          SELECT C_STATE_HISTORICAL_CLAIM,
                 NULL,
                 NULL,
                 SUBSTR(mbr_key,1,27),
                 mbr_sys_key,
                 person_id,
                 TRUNC(srv_dt_from),
                 C_DIPTHERIA
            FROM v_claim_external
           WHERE srv_dt_from BETWEEN p_start_date AND p_end_date
             AND person_id > 0
             AND (
                      proc_i_1 LIKE '9936%'
                   OR proc_i_1 LIKE '9939%'
                  );

IS there a way where I can use the LIKE clause with a varying number of values?

Thanks Received on Sun Jul 19 2009 - 14:08:21 CDT

Original text of this message