Skip to Main Content
  • Questions
  • passing multiple values to one parameter and get the result for all teh values of teh parameter

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question.

Asked: February 10, 2020 - 1:41 pm UTC

Last updated: February 17, 2020 - 1:54 am UTC

Version: oracle sql developer 3.2.20.09

Viewed 10K+ times! This question is

You Asked

I have a function which has 10 input parameters.
Initially the ask is one value per parameter.
BUt now the ask is each parametr has multiple values and teh function need to execute for all teh values and give result.
The parameters are of VACHAR and INT datatypes.
Below is teh function I am using.

create or replace 
FUNCTION              "VF_PPM_PRJ_LIST" (P_LEGAL_ORG_ID IN VARCHAR2 ,P_CONTACTMAIL_ID IN VARCHAR2 ,P_REGION IN VARCHAR2 DEFAULT NULL,P_STATUS_NAME IN VARCHAR2 DEFAULT NULL, P_PROJECT_NAME IN VARCHAR2 DEFAULT NULL
,P_PROJECT_MANAGER IN VARCHAR2 DEFAULT NULL,P_CUSTOMER_PM IN VARCHAR2 DEFAULT NULL,P_PROJECT_PHASE IN VARCHAR2 DEFAULT NULL,P_HIERARCHY_LEVEL IN VARCHAR2 DEFAULT NULL,P_RAG_STATUS IN VARCHAR2 DEFAULT NULL) RETURN TABLE_VF_EC_Project_List
--P_PROJECT_PHASE IN VARCHAR2,
IS
L_TAB_OBJ_VF_EC_Project_List TABLE_VF_EC_Project_List := TABLE_VF_EC_Project_List();
N INTEGER := 0;


BEGIN
     FOR R IN (SELECT PROJECT_ID, PROJECT_NAME , REFRESH_DATE, VODAFONE_PM, CUSTOMER_PM, REGION, PROJECT_STATUS, PROJECT_PHASE, OVERALL_HEALTH, TCV,TOTALRISKS, TOTALISSUES FROM 
                     (
                      SELECT DISTINCT
                            
                            RHD1.REQUEST_ID AS PROJECT_ID,
                            P.PROJECT_NAME AS PROJECT_NAME,
                            SYSTIMESTAMP AS REFRESH_DATE,
                            RHD1.VISIBLE_PARAMETER40 AS VODAFONE_PM,
                            VF_GETCUSTOMERPM(RHD1.REQUEST_ID) AS CUSTOMER_PM,
                            RD7.VISIBLE_PARAMETER41 AS REGION,
                            PM.DISPLAY_STATUS AS PROJECT_STATUS,
                            RHD1.VISIBLE_PARAMETER16 AS PROJECT_PHASE,
                            UPPER(REGEXP_REPLACE(REGEXP_SUBSTR(RHD1.PARAMETER11,' alt="[A-Za-z]+">'),'alt=|"|>|[[:space:]]+')) AS OVERALL_HEALTH,
                            RD3.VISIBLE_PARAMETER18 AS TCV,
                            vf_GETTOTALRISKS(RHD1.REQUEST_ID) AS TOTALRISKS,
                            vf_GETTOTALISSUES(RHD1.REQUEST_ID) AS TOTALISSUES
                              
                          FROM 
                            KCRT_FG_PFM P,
                            KCRT R,
                            KCRT_REQ RHD1,
                            KCRT_REQUEST RD1,
                            KCRT_REQUEST RD7,
                            KCRT_REQUEST RD5,
                            KCRT_REQUEST RD3,
                            KCRT_TABLE TE,
                            KNTA_PARAM_SET TB,
                            KNTA_PARAMETER TC,
                            KCRT_REQUEST_TYPESS RT,
                            PM PM
                      WHERE 
                             TE.REQUEST_ID = RHD1.REQUEST_ID
                            AND P.REQUEST_ID = R.REQUEST_ID
                            AND RD1.BATCH_NUMBER = 1
                            AND RD1.REQUEST_ID = R.REQUEST_ID
                            AND RHD1.BATCH_NUMBER = 1
                            AND RD7.BATCH_NUMBER = 7
                            AND RD3.BATCH_NUMBER = 3
                            AND RD5.BATCH_NUMBER = 5
                            AND RD5.REQUEST_ID = R.REQUEST_ID
                            AND RD7.REQUEST_ID = R.REQUEST_ID
                            AND RD3.REQUEST_ID = R.REQUEST_ID
                            AND RHD1.REQUEST_ID = R.REQUEST_ID
                            AND PM.PFM_REQUEST_ID = R.REQUEST_ID
                            AND RHD1.PARAMETER11 IS NOT NULL
                            AND RHD1.VISIBLE_PARAMETER16 IS NOT NULL
                            AND RHD1.PARAMETER5 IN ('2','3','4')
                            AND TE.PARAMETER_SET_FIELD_ID = TB.PARAMETER_SET_FIELD_ID
                            AND TB.PARAMETER_SET_CONTEXT_ID = TC.PARAMETER_SET_CONTEXT_ID
                            AND TO_CHAR(TC.CONTEXT_VALUE) = TO_CHAR(RT.REQUEST_TYPE_ID)
                            AND RT.REQUEST_TYPE_NAME = 'G-TES - PROJECT'
                            AND RT.MDL_VIEW_NAME_ROOT='G_TES_PROJECT'
                            AND PM.DISPLAY_STATUS IN ('Active','Active (Basic)')
                            AND RHD1.VISIBLE_Parameter13 IN ('IoT Delivery','Global Delivery','UC Delivery','Fixed - APMEA','Fixed - Americas')
                            AND RHD1.VISIBLE_PARAMETER16 NOT IN ('Pre-Sales / Mobilisation')
                            AND R.STATUS_CODE = 'IN_PROGRESS'
                           -- AND TE.VISIBLE_PARAMETER3=P_CONTACTMAIL_ID
                            -- AND P_CONTACTMAIL_ID  in    '('|| ''''||REGEXP_REPLACE(RD7.VISIBLE_PARAMETER48, '#@#',''',''')||''''||')'
                              AND   lower('('|| ''''||REGEXP_REPLACE(RD7.VISIBLE_PARAMETER48, '#@#',''',''')||''''||')') like lower('%'||P_CONTACTMAIL_ID||'%' )
                          AND  RD5.PARAMETER10 = P_LEGAL_ORG_ID 
                            AND NVL2(P_REGION,         INSTR(P_REGION,RD7.VISIBLE_PARAMETER41),1)>0
                            AND NVL(P_REGION,RD7.VISIBLE_PARAMETER41)= RD7.VISIBLE_PARAMETER41
                            AND NVL(P_STATUS_NAME,PM.DISPLAY_STATUS) = PM.DISPLAY_STATUS
                            AND NVL(P_PROJECT_NAME,P.PROJECT_NAME) = P.PROJECT_NAME
                            AND NVL2(P_PROJECT_MANAGER,INSTR(P_PROJECT_MANAGER,RHD1.VISIBLE_PARAMETER40),1)>0 
                            AND NVL2(P_CUSTOMER_PM,    INSTR(P_CUSTOMER_PM,TE.VISIBLE_PARAMETER1),1)>0
                            AND NVL2(P_PROJECT_PHASE,  INSTR(P_PROJECT_PHASE,RHD1.VISIBLE_PARAMETER16),1)>0
                            AND NVL2(P_HIERARCHY_LEVEL,INSTR(P_HIERARCHY_LEVEL,RHD1.VISIBLE_PARAMETER5),1)>0
                            AND NVL2(P_RAG_STATUS,    INSTR(RHD1.PARAMETER11,P_RAG_STATUS),1)>0
                            ORDER BY RHD1.REQUEST_ID
                      ))
              LOOP
          L_TAB_OBJ_VF_EC_Project_List.EXTEND;
        N := N + 1;
        L_TAB_OBJ_VF_EC_Project_List(N) := VF_EC_PROJECT_LIST(R.PROJECT_ID,R.PROJECT_NAME,R.REFRESH_DATE,R.VODAFONE_PM,R.CUSTOMER_PM,R.REGION,R.PROJECT_STATUS,R.PROJECT_PHASE,R.OVERALL_HEALTH,R.TCV,R.TOTALRISKS,R.TOTALISSUES);
      END LOOP;
      RETURN L_TAB_OBJ_VF_EC_Project_List;
END;


Could you please suggest how to deal with the multivalue parameters for teh function.
The multivalues in parameter are separated by #@#


Additional information:
We need the parameters in this way


where col1 in ('JOHN','SUE')
and col2 in ('JAN','FEB')

and Connor said...

Here's a video walking through how to re-interpret a delimited string into a list you can use within a query



Is this answer out of date? If it is, please let us know via a Comment

More to Explore

PL/SQL demos

Check out more PL/SQL tutorials on our LiveSQL tool.

PL/SQL docs

PL/SQL reference manual from the Oracle documentation library