Question

How to write ref cursor query in Oracle Reports

Asked by: vishal_singh

Hello Guys!!

I have a form in which you can select regions/divisions/locations etc by the use of check boxes. And the selected values will be inserted into a table, and based on the selected values of the table the report is run.
The issue I have is with the query inside the Oracle reports(attached to this file).
The query works fine until the last two EXISTS conditions.
IF a region exists In the table report_param then it works fine but if there are no divisions in it , then the query returns no values, which is not correct.

Someone has advised me to use a ref-cursor query inside reports tool, which I am not aware off. So, anykind of suggestions or advises are welcome. Please let me know about it as it is very urgent issue for me. Anykind of help would be greatly
appreciated.

Thanks,
 Vishal
 

select c.key_segment, p.supplier_id, 
             decode(:in_col_nm, 'BRAND',nvl(p.product_brand,'<Unknown Brand>'), 'PLN',nvl(p.product_legal_name,'<Unknown Legal Name>')) COL_NM,
             sum(a.ext_price) sales_dols,
             sum(comp_allow_pkg.get_comp_allow_stddiv(a.control_loc_id, a.product_id, a.sold_to_customer_id,
                                                                                       a.doc_dt, a.ext_price, a.units)) cust_reb_dols, 
             sum(a.units) units, 
             sum(a.ext_cost) cost_dols
      from sales a, key_segment_plns c, product p, rep_wrtr_dw_cust h
      where a.doc_dt between :in_start_dt and :in_end_dt
      and   a.customer_oc = h.control_loc_id
      and   a.sold_to_customer_id = h.sold_to_cust_id
      and   a.ship_to_customer_id = h.ship_to_cust_id
      and   ((:in_dg_cd = 'B' and h.dealer_grower_cd in ('D','G')) or h.dealer_grower_cd = :in_dg_cd)
      and   a.product_id = p.product_id
      and   p.product_gl_class_cd = 'CHEM'
      and   p.product_legal_name = c.product_legal_name
      and   c.key_segment in ('GLYPHOSATE','PLANT HEALTH/RUST FUNGICIDES','PYRETHROIDS','STROBI FUNGICIDES')--&IN_KEY_SEGMENTS
     -- and    (:in_oc = 'ALL' or (a.control_loc_id in (select control_loc from control_loc_comb_ocs where control_loc_comb = :in_oc)))
      -- SALES DATA FILTERS TO MATCH ACCUM_SALES_DG_MV
      and   a.sale_type_cd in ('02','08')
      and   a.document_type_cd in ('I','C','D')
      and   (substr(a.product_id,-1) in ('0','1') OR nvl(upper(trim(p.product_brand)),'X') = 'TECH FEE')
      and   a.units <> 0
      and   a.unit_cost <> 0
      and   a.unit_price <> 0    
      -- NEW FILTERS  ADDED 9/11/07: LOCATION(BRANCH), BUSINESS TYPE, RSM/ASM/REP
      and   ((:in_loc = 'ALL') or (nvl(a.warehouse_id,'<blank>') in (SELECT param_value
                                                                        FROM   report_param
                                                                        WHERE  report_id = :IN_REPORT_ID
                                                                        AND    session_id= :IN_SESSION_ID
                                                                        AND    USER_ID   = :IN_USER_ID
                                                                        AND    param_name='LOCATION_TYPE')))
      and   ((:in_uhs_ag = 'ALL') or (:in_uhs_ag = 'NA' and p.product_uhs_ag != 'A') or (p.product_uhs_ag = :in_uhs_ag))
      and   ((:in_sales_rep = 'ALL') or  (nvl(a.territory_id,'<blank>') in (SELECT param_value
                                                                        FROM   report_param
                                                                        WHERE  report_id = :IN_REPORT_ID
                                                                        AND    session_id= :IN_SESSION_ID
                                                                        AND    USER_ID   = :IN_USER_ID
                                                                        AND    param_name='SALES_REP_TYPE')))
      and    EXISTS
            (SELECT '1'
             FROM  locations l, report_param rp
             WHERE rp.report_id = :IN_REPORT_ID
             AND   rp.session_id= :IN_SESSION_ID
             AND   rp.user_id   = :IN_USER_ID
             AND   rp.param_value = l.region
             AND   rp.param_name = 'REGION_TYPE'
             AND   a.warehouse_id = L.ARS_LOCATION) 
      and    EXISTS
            (SELECT '1'
             FROM  locations l, report_param rp
             WHERE rp.report_id = :IN_REPORT_ID
             AND   rp.session_id= :IN_SESSION_ID
             AND   rp.user_id   = :IN_USER_ID
             AND   rp.param_value = l.region
             AND   rp.param_name = 'DIVISION_TYPE'
            AND   a.warehouse_id = L.ARS_LOCATION)        
      group by c.key_segment, P.supplier_id, 
      decode(:in_col_nm, 'BRAND',nvl(p.product_brand,'<Unknown Brand>'), 'PLN',nvl(p.product_legal_name,'<Unknown Legal Name>'))

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-07-31 at 10:56:07ID24617477
Tags

Oracle Reports 9i

Topics

Oracle 9.x

,

Oracle 10.x

,

PL / SQL

Participating Experts
2
Points
500
Comments
4

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. REF CURSOR IN ORACLE FORMS
    I'm writing a report which uses nested cursor loops. I assume that I must use a ref cursor but I'm having difficulty. Does anyone have a SIMPLE example of using a ref cursor in Oracle Reports?
  2. Oracle 8.1.5 REF question - PL/SQL
    Hi all, One more question if you can: I have the following object: CREATE OR REPLACE TYPE PARAMSTRUCT as OBJECT ( paramRef REF PARAM, locOctet INTEGER, locBit INTEGER ) When I have one instance of this object, ie. a PARAMSTRUCT object, how can I retrieve the corre...
  3. Problems using REFS in Oracle 9i
    Hi, I'm having problems using refs in Oracle 9i. I have a customer table and an address table. I have set the customer table up like so (using the customer_objtyp): CREATE TYPE customer_objtyp AS OBJECT( customer_id NUMBER(2), name VARCHAR2(30), address REF address_objty...
  4. oracle portal - 3 regions
    Hi.... what i would like to be able to do( and i am v.new to oracle) is to be able to create in Portal, either by itself or by including Discoverer or Reports, how to 1 have a region with a bunch of html links 2 a second region which shows what the html looks like when clic...
  5. Using dynamic SQL within an Oracle stored procedure that …
    I have an Oracle stored procedure as follows: CREATE OR REPLACE PROCEDURE DYNAMIC ( Test_Cursor IN OUT Test_Package2.Test_Type (DECLARES THE REF CURSOR), PARAM_GROUP_BY_STATUS IN VARCHAR2, PARAM_FIELD_COMPARE IN VARCHAR2 ) AS SQL_STATEMENT VARCHAR2 (2000); BEGIN ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: ajexpertPosted on 2009-07-31 at 14:06:55ID: 24992459

Ref Cursor is nothing but a dynamic query returning a result set.

For e.g.

Static Cursor is

select * from emp where dept_no= v_dept_no.

In certain situations you dont know the table name and column name but you want to get result seT

Here is example of ref_cursor:

CREATE OR REPLACE PROCEDURE PR_REF_CURSOR
(p_sql   VARCHAR2,
 v_recs OUT SYS_REFCURSOR)
 
 AS
 
 BEGIN
 
 --p_sql can be any valid sql statement
 OPEN v_recs FOR 
 p_sql;
 
 
 END PR_REF_CURSOR;
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

Select allOpen in new window

 

by: ajexpertPosted on 2009-07-31 at 14:19:04ID: 24992542

--HERE IS HOW IT CANBE CALLED

DECLARE
v_rec    SYS_REFCURSOR;
p_sql    varchar2(1000);
 
v_emp     NUMBER;
v_sal     DATE;
 
BEGIN
-- this is just test statment
P_SQL :=
'SELECT emp_name, sal FROM emp
WHERE ROWNUM < 11';
 
PR_REF_CURSOR(P_SQL, v_rec);
 
 
--OPEN v_rec;
LOOP 
   FETCH  v_rec    INTO v_emp, v_sal;
   EXIT WHEN V_REC%NOTFOUND; 
   DBMS_OUTPUT.PUT_LINE(v_emp  ||'   '|| v_sal);
   DBMS_OUTPUT.PUT_LINE('*****');
END LOOP;
CLOSE v_rec;
 
END;

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

Select allOpen in new window

 

by: AndytwPosted on 2009-08-03 at 12:54:14ID: 25008047

Vishal.  In answer to your first part of the question
>>IF a region exists In the table report_param then it works fine but if there are no divisions in it , then the query >>returns no values, which is not correct.
This query returns no values because that's how you've written the query to behave (with the last EXISTS condition).  What is not "correct" about it?  If you can provide more information about what is correct/incorrect in terms of the results you ned then we can help you fix your query.

>>Someone has advised me to use a ref-cursor query inside reports tool, which I am not aware off
Just to give a Oracle Reports perspective ....
You can use ref cursors (cursor variables) in your report data model.  In Oracle reports it's called a "ref cursor query".  This allows you to put the SQL used for your report in a stored procedure.  
The main benefit is that the SQL in compiled in the database (not in the report), which means it's a lot easier to maintain.  Another advantage is that it reduces code duplication when you have the same query used in multiple reports - no need to code and maintain n copies of that query.  And since a ref cursor is a standard oracle feature, you can use the same ref cursor as a data-source for other applications/tools.

I did a simple example (see the attached screenshot) ....
From the data model editor in Oracle reports, choose the "Ref Cursor Query" icon from the tool pallet.  A new program unit window will popup, where you need to specify the return type of the ref cursor (strongly typed ref cursor).  In my example report, I created a package (TEST) which contained the following TYPE:
CREATE OR REPLACE PACKAGE test AS
  TYPE tRefCursor IS REF CURSOR RETURN user_objects%ROWTYPE;    
END;

I put my query in the program unit QR_1RefCurDS.  However you would want to encapsulate the SELECT statement in a package function.  This can then be returned as a ref cursor to the report. i.e. your report simply calls the function: e.g.

FUNCTION QR_1RefCurDS RETURN test.tRefCursor IS
BEGIN
  return test.getRefCursor(:object_type);
END;

The following link is worth reading as it contains a step-by-step guide to building a report using ref cursor queries.

Oracle9i Reports Building Reports - Building a Paper Report with Ref Cursors
http://download.oracle.com/docs/html/B10310_01/orbr_refcur.htm#1027963

Beacuase of the benefits mentioned above, I'd definitely recommend using ref cursors in Oracle reports.  Please let me know if you need any more help.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...