Yes, our developers do the much the same sort of thing. I find it to be a pain more for organisational reasons -- migrating a stored procedure change to the production system is a much more bureaucratic process than migrating a report change. I seem to recall there being some technique in Business Objects where we defined an object as something like ... /*+ full(e) parallel(e,8) */ NULL and we'd include that as the first column in the report. That would modify the query to: SELECT /*+ full(e) parallel(e,8) */ NULL, e.CREATED_T, ... I don't know if that would work in Crystal though. ----- Original Message ---- From: Tony Adolph <tony.adolph.dba@xxxxxxxxx> To: "Gale, David C ERDC-ITL-MS Contractor" <David.C.Gale@xxxxxxxxxxxxxx> Cc: oracle-l <oracle-l@xxxxxxxxxxxxx> Sent: Thursday, April 10, 2008 11:20:54 PM Subject: Re: Crystal Reports Hi Dave, I'm not sure exactly what the Crystal developer did, but I created a package containing the def for a hard cursor, eg: TYPE payment_rep_record is record ( CREATED_T PINPAP.EVENT_T.CREATED_T%TYPE ,AMOUNT PINPAP.EVENT_BILLING_PAYMENT_T.AMOUNT%TYPE . . . ,STATUS PINPAP.EVENT_BILLING_PAYMENT_T.STATUS%TYPE ,START_T_DATE DATE ); type rep_cursor_type is ref cursor return payment_rep_record; Then in a stand-alone procedure opened a cursor of this type with my the hinted query, ...eg create or replace PROCEDURE vf_payment_report_cr(from_date Date, to_date Date, REF_CURSOR out sys_refcursor) AS begin open REF_CURSOR for SELECT /*+ full(e) parallel(e,8) */ e.CREATED_T, ebp.AMOUNT, blar blar The setup within crystal requires the cursor def (as defined by the package). More than that I would have to ask the developer. Need more info? Just let me know. Cheers Tony