We are using the OSB JMS Reporting Provider to track messages.
We must build custom reports to track the activity within a range of time.
The only problem is that the key-value pairs are stored as SEMICOLON (;) separated lists key1=value1;key2=value2....
Nothing is easier that writing SQL queries supported by PL/SQL functions.
Here how to create the function and types needed:
http://stackoverflow.com/questions/1089508/how-to-best-split-csv-strings-in-oracle-9i
if you run
select tokenize('key1=value1;key2=value2', ';') from dual;
you get the list
GM.TOKEN_LIST('key1=value1','key2=value2')
Since my PL/SQL skills are very basic, I will follow a pure SQL Functions approach:
WITH csv_data AS (SELECT '&your_csv_string' AS CSV ,'[^ |;]+' REGEX FROM DUAL)
SELECT regexp_replace(TRIM(REGEXP_SUBSTR(A.CSV, A.REGEX, 1, LEVEL)),'[^[:print:]]', '') STR FROM csv_data a CONNECT BY LEVEL <= REGEXP_COUNT(A.CSV, A.REGEX) ORDER BY 1
Honestly I prefer a "poor man's" approach, that I will explain in another post.
Friday, April 13, 2012
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment