How to split a varchar parameter say (2,4,7,24) and get each of the value

Hi
I have to create a function which takes in 2 paramters,
first one is date
second one is a list of codes within parentheses (varchar2) ex:- '(2,4,7,24)'
Each of this number value brings out a table information such as
table name
where condition
start and end dates and soon
I need to build a dynamic SQL ..for each table information got from each value.
In this case, their will be 4 select queries which needs to be joined.
To start of, I want to know, how many codes have been passed in the second parm.
Please let me know, if their is a function which contains the number of delimiters and a function which can be used to get each value
basically from (2,4,7,24)
I want
the count of delimiters (here it is 3)
using the count of delimiters (3+1 , will be giving me the count of numbers present)
using the delimiter, I want to get each number
ie.,
2 first time and create the SQL
4
7
24
Atlast will join all 4 sql queries and create one which runs to produce my output
Thank You
I appreciate your help

Sir,
I did the same think, what you have posted, but I want some simpler way, and I dont know how to do it.
create or replace
PACKAGE BODY PKG_EXTRACT_FACILITY AS
-- GET THE FACILITY INFO FOR A GIVEN YEAR .
FUNCTION F_MAIN_FACILITY(PI_DATE DATE,PI_ORGEXT_ID varchar2) RETURN GC_RESULT_SET AS
C_RESULT_SET GC_RESULT_SET;
VN_TABLE VARCHAR2(20);
VN_COLUMN VARCHAR2(40);
VN_WHERE VARCHAR2(20);
VD_START VARCHAR2(40);
VD_END VARCHAR2(40);
VN_MULTI NUMBER(2);
VN_SQL VARCHAR2(4000);
VC_QUERY VARCHAR2(2000);
BEGIN
DBMS_OUTPUT.PUT_LINE(PI_ORGEXT_ID);
DBMS_OUTPUT.PUT_LINE(''''|| PI_ORGEXT_ID ||'''');
--VN_SQL := 'SELECT REPLACE(' PI_ORGEXT_ID ','"' ,'') FROM dual' ;
--DBMS_OUTPUT.PUT_LINE(VN_SQL);
--PI_ORGEXT_ID := EXECUTE IMMEDIATE(VN_SQL);
OPEN C_RESULT_SET FOR
--SELECT ORGEXT_TABLE,count(*), ORGEXT_COLUMN, ORGEXT_WHERE,
-- ORGEXT_START, ORGEXT_END, ORGEXT_MULTI
-- FROM ORG_EXTRACT
-- WHERE ORGEXT_ID IN
-- (SELECT regexp_substr(''''|| PI_ORGEXT_ID ||'''','[^,]+', 1, level) from dual connect by regexp_substr(''''|| PI_ORGEXT_ID ||'''', '[^,]+', 1, level) is not null )
-- group by ORGEXT_TABLE, ORGEXT_COLUMN, ORGEXT_WHERE,
-- ORGEXT_START, ORGEXT_END, ORGEXT_MULTI;
--SELECT ORGEXT_ID,ORGEXT_TABLE, ORGEXT_COLUMN, ORGEXT_WHERE,
-- ORGEXT_START, ORGEXT_END, ORGEXT_MULTI
-- FROM ORG_EXTRACT
-- WHERE INSTR(''''|| PI_ORGEXT_ID ||'''',ORGEXT_ID) > 0 ORDER BY ORGEXT_ID;
SELECT ORGEXT_TABLE, ORGEXT_COLUMN, ORGEXT_WHERE,
ORGEXT_START, ORGEXT_END, ORGEXT_MULTI
FROM ORG_EXTRACT
WHERE ORGEXT_ID IN
(SELECT * FROM TABLE(in_list(PI_ORGEXT_ID)));
-- DBMS_OUTPUT.PUT_LINE(VN_SQL);
LOOP
FETCH C_RESULT_SET INTO VN_TABLE, VN_COLUMN, VN_WHERE, VD_START, VD_END, VN_MULTI;
EXIT WHEN C_RESULT_SET%NOTFOUND;
-- dbms_output.put_line('record '|| VN_TABLE || ' ' || VN_COLUMN );
IF ( VN_MULTI > 0 ) THEN
IF ( VD_START IS NULL AND VN_WHERE IS NOT NULL ) THEN
--SELECT QUERY WITH XML FUNC NOT INCLUDING START AND END DATES.
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID, Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
(SELECT ORG_ID, RTRIM(XMLAGG(XMLELEMENT(E, ' || VN_COLUMN || ' || '','')
ORDER BY ' || VN_COLUMN || ').EXTRACT(''//text()''), '','') AS ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
WHERE ' || VN_WHERE || '
GROUP BY ORG_ID) Q1
WHERE M.ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('FIRST CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
ELSIF ( VD_START IS NULL AND VN_WHERE IS NULL ) THEN
--SELECT QUERY WITH XML FUNC INCLUDING START AND END DATES.
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID, Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
(SELECT ORG_ID, RTRIM(XMLAGG(XMLELEMENT(E, ' || VN_COLUMN || ' || '','')
ORDER BY ' || VN_COLUMN || ').EXTRACT(''//text()''), '','') AS ' || VN_COLUMN || '
FROM rateprep.' || VN_TABLE || '
GROUP BY ORG_ID) Q1
WHERE ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('SECOND CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
ELSIF ( VD_START IS NOT NULL AND VN_WHERE IS NOT NULL ) THEN
--SELECT QUERY WITH XML FUNC INCLUDING START AND END DATES, BUT NOT INCLUDING WHERE CLAUSE.
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID, Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
(SELECT ORG_ID, RTRIM(XMLAGG(XMLELEMENT(E, ' || VN_COLUMN || ' || '','')
ORDER BY ' || VN_COLUMN || ').EXTRACT(''//text()''), '','') AS ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
WHERE ' || VN_WHERE || ' AND
(TO_DATE( ' ||''''|| PI_DATE ||''''|| ', ''DD-MON-YY'') BETWEEN ' ||''|| VD_START ||''|| ' AND ' ||''|| VD_END ||''|| ')
GROUP BY ORG_ID) Q1
WHERE ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('THIRD CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
ELSIF ( VD_START IS NOT NULL AND VN_WHERE IS NULL ) THEN
--SELECT QUERY WITH XML FUNC INCLUDING START AND END DATES, AND INCLUDING WHERE CLAUSE.
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID, Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
(SELECT ORG_ID, RTRIM(XMLAGG(XMLELEMENT(E, ' || VN_COLUMN || ' || '','')
ORDER BY ' || VN_COLUMN || ').EXTRACT(''//text()''), '','') AS ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
WHERE (TO_DATE( ' ||''''|| PI_DATE ||''''|| ', ''DD-MON-YY'') BETWEEN ' ||''|| VD_START ||''|| ' AND ' ||''|| VD_END ||''|| ')
GROUP BY ORG_ID) Q1
WHERE ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('FOURTH CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
END IF;
ELSE
IF ( VD_START IS NULL AND VN_WHERE IS NOT NULL ) THEN
--SELECT QUERY WITHOUT XML FUNC AND WITHOUT START AND END DATES.
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID, Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
( SELECT ORG_ID, ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
WHERE ' ||VN_WHERE || '
) Q1
WHERE M.ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('FIFTH CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
ELSIF ( VD_START IS NULL AND VN_WHERE IS NULL ) THEN
--SELECT QUERY WITHOUT XML FUNC AND WITHOUT WHERE CLAUSE AND START AND END DATES.
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID,Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
( SELECT ORG_ID, ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
) Q1
WHERE ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('SIXTH CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
ELSIF ( VD_START IS NOT NULL AND VN_WHERE IS NOT NULL ) THEN
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID,Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
( SELECT ORG_ID, ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
WHERE ' || VN_WHERE || ' AND
(TO_DATE( ' ||''''|| PI_DATE ||''''|| ', ''DD-MON-YY'') BETWEEN ' ||''|| VD_START ||''|| ' AND ' ||''|| VD_END ||''|| ')
) Q1
WHERE ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('SEVENTH CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
ELSIF ( VD_START IS NOT NULL AND VN_WHERE IS NULL ) THEN
VC_QUERY := 'SELECT ORG_MAIN.ORG_ID,Q1.' || VN_COLUMN || '
FROM ORG_MAIN,
( SELECT ORG_ID, ' || VN_COLUMN || '
FROM ' || VN_TABLE || '
WHERE TO_DATE( ' ||''''|| PI_DATE ||''''|| ', ''DD-MON-YY'') BETWEEN ' ||''|| VD_START ||''|| ' AND ' ||''|| VD_END ||''|| '
) Q1
WHERE ORG_MAIN.ORG_ID = Q1.ORG_ID(+)
ORDER BY ORG_ID';
DBMS_OUTPUT.PUT_LINE('EIGHTH CONDITION ' || VC_QUERY);
EXECUTE IMMEDIATE VC_QUERY;
END IF;
END IF;
-- VC_SQL := 'SELECT ORG_MAIN.ORG_ID,' ||
-- VC_EXT :=
END LOOP;
OPEN C_RESULT_SET FOR VC_QUERY;
RETURN C_RESULT_SET;
CLOSE C_RESULT_SET;
END F_MAIN_FACILITY;
FUNCTION in_list (p_in_list  IN  VARCHAR2) RETURN t_in_list_tab PIPELINED
AS
l_text  VARCHAR2(32767) := p_in_list || ',';
l_idx   NUMBER;
BEGIN
LOOP
l_idx := INSTR(l_text, ',');
EXIT WHEN NVL(l_idx, 0) = 0;
PIPE ROW (TRIM(SUBSTR(l_text, 1, l_idx - 1)));
l_text := SUBSTR(l_text, l_idx 1);+
END LOOP;
RETURN;
END;
END PKG_EXTRACT_FACILITY;
SET SERVEROUTPUT ON;
Declare
VC_OUT NUMBER;
VC_OUT1 VARCHAR2(80);
VC_RES PKG_EXTRACT_FACILITY.GC_RESULT_SET;
begin
VC_RES := PKG_EXTRACT_FACILITY.F_MAIN_FACILITY('01-JAN-10','9,2,3');
LOOP
fetch VC_RES INTO VC_OUT,VC_OUT1;
EXIT WHEN VC_RES%NOTFOUND;
dbms_output.put_line('data ' || VC_OUT ||' ' || VC_OUT1 );
END LOOP;
close VC_RES;
end;
The function I wrote, right now is at building each Select query from each result record produced from passing the second parm to the select query to extract all other table information from
ORG_EXTRACT table.
Any help to solve the business role I wrote in my earlier mail, is appreciated.Thank You.
Edited by: user8703472 on Sep 21, 2012 7:37 AM
Edited by: user8703472 on Sep 21, 2012 7:40 AM
Edited by: user8703472 on Sep 21, 2012 7:44 AM
Edited by: user8703472 on Sep 21, 2012 7:44 AM
Edited by: user8703472 on Sep 21, 2012 7:46 AM

Similar Messages

Maybe you are looking for

  • Burn Audio CD

    When I try to change the burn format under preferences, advanced, burning, i change it to what i want then hit ok. iTunes then freezes and becomes non-responsive.

  • Can i use Oracle9i 9.2.0.5 JDBC on oracle8i ??

    Hi all!! My java app is developed under Weblogic 6.1 and oracle 8i, but we are migrating it to weblogic 8.1, and we have some deprecated classes in ojdbc14.jar (those are Clob and Blob classes) and some troubles with Oracle Types definitions, so, we

  • Where do imported files reside?

    I'm sure this is an incredibly basic "newbie" question but I can't find a clear answer anywhere, so I'd be grateful for any feedback. When you import a file (video, graphic, image, audio) into a Premiere project, does it copy the data or does it simp

  • I get an error message "General exception" everyime i use a java based webs

    Everytime i go onto a java based website, a this pops up saying Java error, general exception... and when i right click on the coffe cup in the lower right hand corner, i click on open console, and this is what i see basic: Registered modality listen

  • Unable to update IOS 4.3.2 from IOS 4.3

    Unable to update IPhone 4 version 4.3 to version 4.3.2 from itunes. When I'm plug IPhone to PC, ITunes notification me whether want to update software. I clicked 'Download and Update' option and it take 1~2 hours to download but when downloaded finis