Oracle Report Builder 12报表调用:如何从当前报表调用带参数的其他报表?
Hey there! I’ve dealt with this exact scenario before—Oracle Reports Builder 12 doesn’t have a dedicated "call report" button in its UI, but you can absolutely trigger another parameterized report using built-in PL/SQL functions. Here’s a step-by-step breakdown to make it work:
1. Set Up a Reference to the Target Report
First, you need to define a way to reference the report you want to call. Head to the Object Navigator, right-click on the Program Units node, and create a new PL/SQL procedure (or you can use a trigger directly, but a procedure keeps your code cleaner and reusable).
2. Use the RUN_REPORT_OBJECT Built-in Function
This is the core tool for executing another report. You’ll need to handle three key steps: create a parameter list, populate it with your target report’s required parameters, and then run the report. Here’s a sample code snippet you can adapt to your needs:
DECLARE v_report_id REPORT_OBJECT; v_param_list PARAMLIST; v_return_val VARCHAR2(100); BEGIN -- Create a parameter list to hold the target report's parameters v_param_list := CREATE_PARAMETER_LIST('TARGET_REPORT_PARAMS'); -- Add your parameters here (match names exactly to the target report's parameters) ADD_PARAMETER(v_param_list, 'P_EMPLOYEE_ID', TEXT_PARAMETER, :CURRENT_REPORT.EMP_ID); ADD_PARAMETER(v_param_list, 'P_DEPARTMENT', TEXT_PARAMETER, 'Marketing'); -- Get the ID of your target report (replace 'TARGET_REPORT' with its name in the Object Navigator) v_report_id := FIND_REPORT_OBJECT('TARGET_REPORT'); -- Execute the report with the parameter list v_return_val := RUN_REPORT_OBJECT(v_report_id, v_param_list); -- Optional: Check for errors during execution IF v_return_val != '0' THEN MESSAGE('Failed to run report. Error code: ' || v_return_val); RAISE FORM_TRIGGER_FAILURE; END IF; -- Clean up the parameter list (good practice to avoid memory leaks) DESTROY_PARAMETER_LIST(v_param_list); END;
3. Attach the Code to a Trigger or Custom Button
Since there’s no default button for this action, you have two common options:
- Add a custom button: Drop a button onto your report layout, then attach the code to the button’s WHEN-BUTTON-PRESSED trigger. Users can click this button to launch the target report.
- Trigger automatically: If you want the report to run without user input (e.g., after the current report finishes), attach the code to a report-level trigger like AFTER REPORT.
4. Key Tips to Avoid Issues
- Make sure the target report is accessible to your runtime environment: it should be in the correct directory, or registered in your Oracle Reports Server if you’re running reports remotely.
- Double-check parameter names: they must match exactly what the target report expects (case-sensitive in some environments).
- Customize output format: Add a
DESFORMATparameter to your list if you want to specify PDF, HTML, or another format:ADD_PARAMETER(v_param_list, 'DESFORMAT', TEXT_PARAMETER, 'PDF');
That’s it! This method is the standard way to call parameterized reports in Reports Builder 12. If you run into issues with parameter passing or report access, feel free to dig into the error codes returned by RUN_REPORT_OBJECT—they’ll usually point you in the right direction.
内容的提问来源于stack exchange,提问作者ali yousef

