?
Solved

Multiple parameters passed from Reporting Services to an Oracle database

Posted on 2011-03-10
11
Medium Priority
?
477 Views
Last Modified: 2012-05-11
I have an oracle procedure that works fine with reporting services if I want either 'All' of the items in the list
or if I want just one, but not multiples.  I have tried creating a function from code I found but I get
an error "Error(4,23): PLS-00201: identifier '','' must be declared".  I have done very little work with either
Oracle or reporting services.  Can someone please give me very clear detailed instructions on
what I'm doing wrong.  Thank you.  My deadline is tomorrow.

create or replace function MultiParam
(
    p_cursor sys_refcursor,
    p_del varchar2 := "','"
) return varchar2
is
    l_value   varchar2(32767);
    l_result  varchar2(32767);
begin
    loop
        fetch p_cursor into l_value;
        exit when p_cursor%notfound;
        if l_result is not null then
            l_result := l_result || p_del;
        end if;
        l_result := l_result || l_value;
    end loop;
    return l_result;
end MultiParam;

Open in new window

0
Comment
Question by:bmurray61259
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
11 Comments
 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 35094750
Please provide more about the requirements.

From the little you posted, I would guess that you are wanting to pass a comma delimited list into a function/procedure and have it processed in some IN-List in a query.

This can be done but you need to use Dynamic SQL.

I can help with the PL/SQL code but have never touched Reporting Services.
0
 

Author Comment

by:bmurray61259
ID: 35094859
I am receiving a list from reporting services like the following
'123, 456, 789'.  What I need is a list for the parameter that looks like '123', '456', '789'.

I create the variable which is a varchar2 in a stored procedure.  The original line that gets me either all or one is WHERE (sitrepinteractionfields.sitename = p_Site  OR NVL(p_Site, ' ') = ' ' or p_Site = 'All')

If you need any other info let me know.
0
 

Author Comment

by:bmurray61259
ID: 35094870
I am receiving a list from reporting services like the following
'123, 456, 789'.  What I need is a list for the parameter that looks like '123', '456', '789'.

I create the variable which is a varchar2 in a stored procedure.  The original line that gets me either all or one is WHERE (sitrepinteractionfields.sitename = p_Site  OR NVL(p_Site, ' ') = ' ' or p_Site = 'All')

If you need any other info let me know.
0
What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 35095389
Can you post your stored procedure?

You will need to use dynamic sql or a little smoke and mirrors.
0
 

Author Comment

by:bmurray61259
ID: 35096672

procedure Rpt_Multiple
  
              (p_Site varchar2 
              , p_ Type varchar2
              , p_Status varchar2
              , p_Start date :=null
              , p_End date :=null
              , cur_Multiple out t_cursor
              ) AS
  BEGIN
        open cur_Multiple for
   
          SELECT sitename
                , type
                , status
                , SITREPID
                , Service
                , ItemName
                , CreateDate
                , ModifiedDate
                
            FROM  interactionfields
               Inner Join sitreps
                on interactionfields. id = sitreps. id  

            WHERE (sitename in p_Site  OR NVL(p_Site, ' ') = ' ' or p_Site = 'All Locations')
              and (incidenttype = p_Incident_Type or NVL(p_Incident_Type, ' ') = ' ' OR p_Incident_Type = 'All' )
              and (status = p_Status OR NVL(p_Status, ' ') = ' ' OR p_Status = 'All')
              and (CreateDate <= p_ReportDateEnd or NVL(To_Char(p_ReportDateEnd, 'DD-MON-YY'),' ')= ' ' )
              and (CreateDate >=  p_ReportDateStart  or NVL(To_Char(p_ReportDateStart, 'DD-MON-YY'),' ')= ' ' )
             ;
END Rpt_Multiple;

Open in new window

0
 
LVL 77

Accepted Solution

by:
slightwv (䄆 Netminder) earned 2000 total points
ID: 35096935
Here's an example following your code.

the var, exec and print are sqlplus pieces to test the code.
drop table tab1 purge;
create table tab1(col1 char(1) primary key);

insert into tab1 values('a');
insert into tab1 values('c');
commit;

create or replace procedure myProc(in_site in varchar2, cur_multiple out sys_refcursor) is
begin

	open cur_multiple for 
	'select col1 from tab1 where ''' || in_site || ''' is null or col1 in (''' || replace(replace(in_site,' ',''),',',''',''') || ''') ';
end;
/

show errors

var myCur refcursor

exec myProc('a, b, c',:myCur);

print mycur

Open in new window

0
 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 35366206
I believe http:#a35096935 answers the question.
0
 
LVL 77

Expert Comment

by:slightwv (䄆 Netminder)
ID: 35370611
I suggest accept: http:#a35096935
0

Featured Post

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It is helpful to note: This is a cosmetic update and is not required, but should help your reports look better for your boss.  This issue has manifested itself in SSRS version 3.0 is where I have seen this behavior in.  And this behavior is only see…
Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
This video shows information on the Oracle Data Dictionary, starting with the Oracle documentation, explaining the different types of Data Dictionary views available by group and permissions as well as giving examples on how to retrieve data from th…
Suggested Courses

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question