Link to home
Start Free TrialLog in
Avatar of cookiejar
cookiejarFlag for United States of America

asked on

Passing an array of values in a string from Crystal Reports 2011 to ORACLE 11G INTO A CLOB data type in a store procedure

I would like to pass an array of value  for exampe '1203030','1S0303030','2002022' from Crystal reports to a CLOB and then parse the values to insert into a table.

The string will exceed 4000 characters so I am unable to store in VARCHAR2 data type.
Can this be done?  If so, could you give me an example?
Avatar of Mike McCracken
Mike McCracken

Crystal Reports is a reporting tool.  It isn't intended to be used to change/update a database.

Is Crystal just the source of the values or is your intent to use Crystal to populate the database?

mlmcc
Same here. Crystal runs in a READ ONLY transaction, so you need to find another interface that can write to the database.
Avatar of cookiejar

ASKER

My source of values are being sent to Crystal multi-select parameter via JAVA.  From Crystal the values will be sent to an ORACLE stored procedure to write to a table.
Oops this question should have been submitted to ORACLE experts.
ASKER CERTIFIED SOLUTION
Avatar of slightwv (䄆 Netminder)
slightwv (䄆 Netminder)

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
How do I remove it from your queue and  send to ORACLE queue?
>>How do I remove it from your queue and  send to ORACLE queue?

It is posted in the Oracle Zone.  Many Experts are also Experts in other areas.  It was the 'Crystal Reports' aspect of the title of the question that confused us.
> So is the question really how to pass a CSV list into an Oracle procedure, parse it and insert the values into a table?

Yes,  pass a CSV list to ORACLE stored procedure that  will exceed 4000 characters.
Make the input to the procedure a CLOB.  Then you need to change the Java program to use a compatible object type.

Now for the format of the CSV, 'a','b','c' will likely not work.  You will either need to change it to: 'a,b,c' or double up on the single quotes so Oracle can handle it(all single quotes, no double quotes used): '''a'',''b'',''c'''

To parse it in the procedure once you get it, there are many examples out there on how to do this.

If you search this site (or the web) for str2tbl, there is a function you can use or you can write your own.

Let us know what pieces you need help with.  I can help with any of the Oracle pieces but I'm not a Crystal or Java person.
Here's a snippet of code that was sent to me by one of your experts sometime of ago.  This is what is being using for a VARCHAR2 data type.  Will this work with a CLOB?

CURSOR parse_org_list IS
   SELECT replace(txt, '''', NULL) org_id
FROM (SELECT REGEXP_SUBSTR (p_orglist, '[^,]+', 1, LEVEL) txt FROM DUAL
      CONNECT BY LEVEL <= LENGTH (p_orglist) - LENGTH (REPLACE (p_orglist, ',')) + 1);
It should work fine with 10g and above.

There were some restictions on some functions like REPLACE with CLOBs but I think most of those have been resolved in newer releases.
The questio is only in the Oracle database zone.  many of have filters set to look at the title and the body for key words in case a question is asked in the wrong zone.

You can export a Crystal report and update a database through an ODBC connection but that isn't what you want.

mlmcc