Dynamic sql in classic report

Hi everyone,
I have following question/task:
I have to generate an classic report. The problem is that the source of the report should be and dynamically generated sql query. The number and names of columns will always be the same. I already created the function which returns an varchar2 value, which in turn holds dynamically generated query. Lets say the function which generates the query is da_sql_flow_gen(v_authid number). As you can see the function takes v_authid as a parameter. v_authid it self will be a page item which will contain some random number.
I need something like this to be a source of the region
begin
return 'select da_sql_flow_gen(:P4_ID) from dual;';
end;but it does not work. Any suggestions ?
Or can I solve my task only with "pl/sql dynamic content" region ?
Thanks
Edited by: Boris Girsch on Feb 11, 2013 6:29 AM
Edited by: Boris Girsch on Feb 11, 2013 6:37 AM

fac586 wrote:
Boris Girsch wrote:
Hi everyone,
I have following question/task:
I have to generate an classic report. The problem is that the source of the report should be and dynamically generated sql query. The number and names of columns will always be the same. I already created the function which returns an varchar2 value, which in turn holds dynamically generated query. Lets say the function which generates the query is da_sql_flow_gen(v_authid number). As you can see the function takes v_authid as a parameter. v_authid it self will be a page item which will contain some random number.
I need something like this to be a source of the region
begin
return 'select da_sql_flow_gen(:P4_ID) from dual;';
end;but it does not work. Any suggestions ?It should be:
begin
return da_sql_flow_gen(:P4_ID);
end;
The approach you advocate forces you to use generic column names, whereas generating the same query in a functionaly identical anonymous block doesn't.
There is a workaround whereby if you wrap the call to the SQL-generating function within another SQL statement, you can use the named columns option:
   begin
      return 'SELECT * from ('||da_sql_flow_gen(:P4_ID)||')';
   end;I've not installed 4.2 yet so perhaps they've closed off this particular loophole (or indeed, fixed the "bug").

Similar Messages

  • Can we use Dynamic SQL in Oracle Reports ?

    Hi ,
    Can we use Dynamic SQL in Oracle Reports ?
    If yes please give some examples .
    Thanx
    srini

    I believe the built-in package SRW.Do_Sql is what you are looking for
    Example from the document:
    /* Suppose you want to create a "table of contents" by getting the
    ** first character of a columns value, and page number on which its
    ** field fires to print. Assume that you want to put the "table of
    contents"
    ** into a table named SHIP. You could write the following construct:
    DECLARE
    PAGE_NO NUMBER;
    PAGE_FOR INDEX NUMBER;
    SORT_CHAR CHAR(1);
    CMD_LINE CHAR(200);
    BEGIN
    SORT_CHAR := :SORT_NAME ;
    IF :CALLED = Y THEN
         SRW.GET_PAGE_NUM(PAGE_FOR_INDEX);
         SRW.USER_EXIT(RWECOP PAGE_FOR_INDEX
         P_START_PAGENO);
         SRW.MESSAGE(2,TO_CHAR(:P_START_PAGENO));
    END IF;
    SRW.GET_PAGE_NUM(PAGE_NO);
    CMD_LINE := INSERT INTO SHIP VALUES
                          (||SORT_CHAR||,||TO_CHAR(PAGE_NO)||);
    SRW.MESSAGE(2,CMD_LINE);
    SRW.DO_SQL(CMD_LINE);
    COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX THEN
            NULL;
      WHEN SRW.DO_SQL_FAILURE THEN
            SRW.MESSAGE(1,FAILED TO INSERT ROW INTO SHIP TABLE);
      WHEN OTHERS THEN
           COMMIT;
    END;

  • Dynamic SQL for creating report in portal

    Has anyone had to create report in Portal using dynamic sql. That is you build up the query commands depending on the parameters entered by the user.
    E.g the columns displayed will be what the users has selected in the parameter form.
    Urgent reply please,
    Femi

    Hi,
    You can use SQL based reports to do this. The report should have a bind variable. The bind variable is used for the users to enter their values and query is built using the value in the bind variable. The user should enter the value of the bind variable from the customization screen.
    Here is an example
    select * from scott.emp
    where deptno = :vdept
    Here vdept appears in the customization screen and user should enter a value for this and run the report.
    Thanks,
    Sharmila

  • Dynamic SQL in a report

    Hi,
    I need to create a concurrent program (report or XML report) which will show me the output in Excel.
    I want to change the SQL of this report for every execution (like addition of column, addition/deletion of sql conditions etc)
    How to fulfill this requirement
    Regards
    Ganesh

    use xml pulisher to display report output in excel

  • Dynamic sql query for report based on user input

    Hi everyone,
    I have built custom search fields (name, date born, gender etc.) in the search region and in the results region a report need to be displayed.
    Now I'm not very experienced with Apex or Oracle sql, but could anyone telll me how to first check if a user filled in a field and then build a query based upon what field the user filled in to submit.
    Any help would be appreciated, thanks in advance.
    regards,
    Cleo
    Edited by: Cleopatra on Jan 18, 2011 5:51 AM

    Hi, Cleopatra. Welcome to OTN!
    If you don't have too many fields instead of checking to see if they're filled in you can use OR conditions in yoru WHERE_CLAUSE to check for NULLS to ignore NULLS, something like (you will have to test this carefully!)
    AND some_column = NVL(:P24_1,some_column)the idea being that if the field is NULL then the column will match itself - in this case assuming the column itself does not have a null value

  • How to implement Dynamic Sort to an SQL classic report?

    Hi,
    I'm trying to implement dynamic sort to my working sql classic report, when user selects order by column from select item(action as submit page), the report should be refreshed and display with the selected column sort order.
    But not able to do so.
    Report Query:
    Select a, b, c from sample order by :P1_ORDER_BY
    P1_ORDER_BY - Select Item:
    STATIC2: Column 1;a, Column 2;b, Column 3;c
    Running page, report doesnt sorts in any of the column priority.
    Kindly guide.
    Regards,
    Krishna

    Of course the select item is in use.
    It should submit the the page on select so you can retrieve the current value in you report select statement.
    look here:
    http://apex.oracle.com/pls/apex/f?p=21296:2:
    table:
    create table sample
      a varchar2(30)
    , b varchar2(30)
    , c varchar2(30)
    insert into sample values('a','z','k');
    insert into sample values('b','y','d');
    insert into sample values('c','x','a');
    insert into sample values('d','w','b');
    commit;
    Select List:
    P2_ORDER_BY
    STATIC:Order by A;A,Order by B;B,Order by C;C
    Report select:
    select
    a,b,c
    from sample
    order by
      decode(:P2_ORDER_BY,'A',a,null)
    , decode(:P2_ORDER_BY,'B',b,null)
    , decode(:P2_ORDER_BY,'C',c,null)Marc
    Edited by: telemat on Aug 24, 2012 1:50 PM

  • How can a classic report be filtered using one select item and dynamic action?

    APEX 4.2.1
    DB 11g
    I have a page with 4 reports on it.  The top report is an interactive report and the following 3 are classic reports.  The users would like to be able to use a select list to filter the 3rd report by PO line number without refreshing the entire page.
    After verifying that the report is set to allow partial refreshes, I took the following steps
    1.  Created a PO Line select item (p_po_line_select) in the same report region
    2.  Added p_po_line_select to the report query
    3.  Created a dynamic action on p_po_line_select with 2 true actions
         1.  Set value (p_po_line_select)
         2.  Refresh report region.
    The Set Value dynamic step was not working; I would get an out of memory error at line 2, memory stack error, or the value did not get saved to session state depending on the settings I selected.  I was able to get it working with the following set:
    1.  Action = Set Value
    2.  Set type = PL/SQL Expression
    3.  PL/SQL Expression = :p_field_does_not_exist
    4.   Page items to submit = blank
    5.  Selection Type = Item(s)
    6.  Item(s) = p_field_does_not_exist
    p_field_does_not_exist does not exist as a page or application item which leads me to believe that this is a bug and I am just lucky that it worked.  I would rather know how to do this properly.  Can someone please provide a link to a working example of how this should be done or state which settings are wrong?
    I was able to reproduce the issue in the following app
    http://apex.oracle.com/pls/apex/f?p=4500:1000
    workspace = occam
    user  test/apex1
    Thanks,

    STOP POSTING DUPLICATE THREADS.
    If you have additional information, continue the discussion by posting it as a follow-up on the original thread: What is the proper way to filter classic report using just an LOV select field with dynamic action?

  • Dynamic action in column of classic report

    Good day master!
    Hi im new in apex,, so im dynamic ondering if its posible to create a dynamic action in the column of classic report in apex?
    i'm trying but its not working my problem goes like this..
    i have a classic report stock_replenish
    columns
    item_code
    price
    supplier_name
    item_code is a pop-up loved by sql
    what i want to do is when the user choose a item_code it will also return the price and supplier_name
    i can do that in apex form but i dont know if iits posible to clasic report?
    please help!
    ty
    Myke;l

    Dynamic action on report columns is possible but not as straigth forward as on items.
    First you can't select "report colum" as selection type for the dynamic action. Use jQuery Selector instead.
    See the [url http://api.jquery.com/category/selectors/]jquery documentation  on possible selectors.
    I prefer to use something like[name='f01'].
    Use the developer tools of your browser to see the name of your report column.
    Because you can't submit a single report cell value with the action "Set value".
    You have to use a combination of a action "Execute javascript" and a ondemand process.
    The javascript code is something like
      var elementId,idParts,row;
      /*Determine the id of the element that has triggered the dynamic action*/
      elementId = String(this.triggeringElement.id);
      /*The id of a item in a report column consists of to parts the name and the rownumber*/
      idParts = elementId.split('_');
      /*The second part is the rownumber we need that to set the value in the right row later on*/
      row = idParts[idParts.length-1];
      /*This calls the ondemand process*/
      apex.server.process ( "MANAGER_EMAIL", {x01:$v(this.triggeringElement),x02:row}, {success: function( pData ) { $s(pData.r,pData.d) }} );apex.server.process(name ondemand process,values to be submitted,options)
    {x01:$v(this.triggeringElement),x02:row}
    This submits the values of the triggering element and the row on which all the action is happening.
    x01 refers to apex_application.g_x01
    {success: function( pData ) { $s(pData.r,pData.d) }}
    The succes option defines a function that is executed upon succefull completion of the ondemand process.
    The ondemand process returns a json object. Which we can refer to in the javascript function with pData.
    In our ondemand process we are defining the json object as having to properties.
    d and r . d is the display value and r is the id of the element to be set.
    $s(r,d) is a [url http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/javascript_api.htm#CDEEIGFH]apex javascript function that sets the value d to item with id r.
    Now the server side code. This is an application process with process point Ondemand.
    Which is something like this.
    declare
      cursor c_emp(b_employee_id in number)
      is
        select emp.email
        from   oehr_employees emp
        where  emp.employee_id = b_employee_id
      col_emp_email oehr_employees.email%type;
      v_regel       number;
    begin
      /*Get the employee email*/
      open  c_emp(apex_application.g_x01);
      fetch c_emp
      into  col_emp_email;
      close c_emp;
      /*Calculate the rownumber do this only if the triggering element is a popup lov*/
      v_regel := to_number(apex_application.g_x02) + 1;
      /*Create the json header*/
      APEX_PLUGIN_UTIL.PRINT_JSON_HTTP_HEADER;
      /*Print out the json object*/
      sys.htp.p('{"d":"'||col_emp_email||'","r":"f03_'||lpad(to_char(v_regel),4,'0')||'"}');
    end; For specification of the JSON notation see [url http://www.json.org/]http://www.json.org/
    To see this in action I have set up a [url http://apex.oracle.com/pls/apex/f?p=VANBAREN_FORUM_TRY_OUT:TBDA:0&c=VANBAREN]demo.
    Change the manager and the manager email will change.
    I hope this is enough to get you started.
    If you have a problem in translating the above code to your specific situation set something up on apex.oracle.com. Then the help can be more specific to.
    Nicolette

  • How to rename C00n generic column names in a Dynamic SQL report

    I have a an interface whereby the user can select 1 to 60 (upper limit) columns out of 90 possible columns (using a shuttle) from one table before running a report.
    To construct the SQL that will eventually execute, I'm using a "PLSQL function body returning SQL query" with dynamic SQL. The only problem is that I have to use "Generic Column Names" option to be able to compile the code and end up with c001 to c060 as the column names.
    How can I use the names of the selected columns as the report headings rather than c001, C002... etc?
    I do not know beforehand which columns, or how many columns or the order of the selected columns.
    I know Denes K has a demo called Pick Columns but I can't access his code. I have a hunch though that he may be just using conditions to hide/show the apropriate columns.
    thanks in advance
    PaulP

    Hi Paul
    I would change the Heading Type in the Report Details screen to PLSQL and use the shuttle item to return the column values. e.g.
    RETURN :p1_shuttle;
    I'm assuming the shuttle already has a colon separated list of the column headings in the correct order?
    I hope that helps
    Shunt

  • Report using ref cursor or dynamic Sql

    Hi,
    I never create a report using a ref cursor or a dynamic sql. Could any one help me to solve the below issue.
    I have 2 tables.
    1. Student_Record
    2. Student_csv_help
    Student_Record the main table where the data is stored.
    Student_csv_help will contain the all the column names of the Student_record.
    CREATE TABLE Student_CSV_HELP
    ENTRY_ID NUMBER,
    RAW_NAME VARCHAR2(40 BYTE),
    DESC_NAME VARCHAR2(1000 BYTE),
    IN_OUTPUT_LIST VARCHAR2(1 BYTE)
    SET DEFINE OFF;
    Insert into TOA_CSV_HELP
    (ENTRY_ID, RAW_NAME, DESC_NAME, IN_OUTPUT_LIST)
    Values
    (1, 'S_ID', 'Student ID', 'Y');
    Insert into TOA_CSV_HELP
    (ENTRY_ID, RAW_NAME, DESC_NAME, IN_OUTPUT_LIST)
    Values
    (2, 'S_Name', 'Student Name', 'Y');
    Insert into TOA_CSV_HELP
    (ENTRY_ID, RAW_NAME, DESC_NAME, IN_OUTPUT_LIST)
    Values
    (3, 'S_Join_date', 'Joining Date', 'Y');
    Insert into TOA_CSV_HELP
    (ENTRY_ID, RAW_NAME, DESC_NAME, IN_OUTPUT_LIST)
    Values
    (4, 'S_Address', 'Address', 'Y');
    Insert into TOA_CSV_HELP
    (ENTRY_ID, RAW_NAME, DESC_NAME, IN_OUTPUT_LIST)
    Values
    (5, 'S_Fee', 'Tution Fee', 'N');
    commit;
    CREATE TABLE Student_record
    S_ID NUMBER,
    S_Name VARCHAR2(100 BYTE),
    S_Join_date date,
    S_Address VARCHAR2(360 BYTE),
    S_Fee Number
    Insert into Student_record
    (S_ID, S_Name, S_Join_date, S_Address,S_Fee)
    Values
    (101, 'john', TO_DATE('12/17/2009 08:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'CA-94777', 2000);
    Insert into Student_record
    (S_ID, S_Name, S_Join_date, S_Address,S_Fee)
    Values
    (102, 'arif', TO_DATE('12/18/2009 08:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'CA-94444', 3000);
    Insert into Student_record
    (S_ID, S_Name, S_Join_date, S_Address,S_Fee)
    Values
    (103, 'raj', TO_DATE('12/19/2009 08:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'CA-94555', 2500);
    Insert into Student_record
    (S_ID, S_Name, S_Join_date, S_Address,S_Fee)
    Values
    (104, 'singh', TO_DATE('12/20/2009 08:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'CA-94666', 2000);
    Commit;
    Now my requirement is:
    I have a form with Student_record data block. When i Click on print Button on this form. It will open another window which has Student_CSV_HELP.DESC_NAME and a check box before this.
    The window look like as below:
    check_box       DESC_NAME+
    X                   S_ID+
    --                   S_Name+
    X                   S_Join_date+
    X                   S_Address+
    --                  S_Fee+
    X  means check box checked.+
    --  means check box Unchecked.+
    After i selected these check boxes i will send 2 parameters to the report server
    1. a string parameter to the report server which has the value 'S_ID,S_Join_date,S_Address' (p_column_name := 'S_ID,S_Join_date,S_Address');
    2. the s_id value from the student_record block (p_S_id := '101');
    Now my requirement is when i click on run. I need a report like as below:
    Student ID : 101+
    Joining Date : 12/17/2009 08:00:00+
    Address : CA-94777+
    This is nothing but the ref cursor should run like as below:
    Select S_id from student_record block S_id = :p_S_id;
    Select S_Join_date from student_record block S_id = :p_S_id;
    Select S_Address from student_record block S_id = :p_S_id;
    So, according to my understanding i have to select the columns at the run time. I dont have much knowledge in creating reports using ref cursor or dynamic sql.
    So please help me to solve this issue.
    Thanks in advance.

    Plain sql should satisfy your need. Try ....
    Select S_id, S_Join_date, S_Address
    from student_record
    where S_id = :p_S_id

  • Erratic Report Region Behavior with Dynamic SQL Queries

    I'm running HTMLDB v 1.5.1.00.12 and I've noticed some odd behavior with report regions using dynamic SQL queries. Every so often, our testers will run a page containing a dynamic sql report region and get the following error, (despite the fact the query was working only moments ago and no other developer has touched it):
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    or sometimes
    failed to parse SQL query:ORA-01403: no data found
    The only solution I've found so far is to:
    1) Make a copy of the failed report region.
    2) Disable or delete the original failed report region.
    The new copy of the report region runs without issue.
    My search of the forums turned up the following two threads, but neither provided me with a clear explanation of the cause, and how to avoid it:
    ORA-06502:PL/SQL: numeric or value error: character string buffer too small
    Re: Import Export Error (ORA-06502)
    The columns being returned are below the 4000 character limit, and the rows being returned are far less than 32k in size.
    Could this have anything to do with the way HTMLDB is internally storing the PL/SQL used to generate the dynamic SQL Query? Is there any known issue related to this with that version of HTMLDB?
    This problem occurs without any discernable pattern or consistency, making it hard to determine where I should focus my efforts in tracking down the cause.

    Hi all,
    My report seems to be behaving correctly once i set it to "Use Generic Column Names (parse query at runtime only)" :)
    Cheers,
    Joel

  • How to create a dynamic action from link column in classic report

    I Have an apex page that display a modal window utilizing jquery. In the modal window I have a classic report with a link column that I want to capture its click event.
    I was thinking I could create a dynamic action with selection type=jquery selector. Not for sure if I need to do anything on link column and do not know the syntax
    for jquery selector. Would appreciate any help or direction???

    Thank you for your response. I am very new to Jquery so don't understand all that well.
    What I did:
    I created a dynamic action
    Event: Click
    Selection Type: jQuery Selector
    jQuery Selector: tdheaders
    Created True Actions
    I created an alert to see if this is being executed.
    Alert 'I made it here'
    What I have:
    I created a report region with the following query:
    Select empno, ename, 'SELECT' from emp
    where (ename like '%'||ltrim(rtrim(:P2_SEARCHPU))||'%'
    or :P2_SEARCHPU is null)
    I created 'SELECT' column as Link Column
    Report Attributes
    Link Text Select
    Target Page in this Application
    Page 2
    Region Header
    <div id="ModalForm2" title="Employee List" style="display:none">
    Region Footer
    </div>
    This report is displayed in a modal form when a button is clicked.
    Code for modal window in Page Header
    <script type="text/javascript">
    $( function() {
    $('#ModalForm2').dialog(
    { modal : true ,
    autoOpen : false ,
    buttons : {
    Cancel : function() {
    closeForm2();
    function openForm2()
    $('#ModalForm2').dialog('open');
    function closeForm2()
    $('#ModalForm2 input[type="text"]').val('');
    $('#ModalForm2').dialog('close');
    </script>
    I am trying to capture the click event on the link column of the report in the modal form. I want to pass a couple of column values
    back to the main form and close the modal window. I do not want to do the submit that happens if I click on the link column and link back to the main page(2)
    If I let the submit to happen, all other entered fields are cleared on my main form.
    Just don't understand the jQuery selector. I have no problem catching the button clicks on the modal form.

  • PLSQL processing of a dynamic sql report

    Hi there,
    I have a problem processing a dynamic sql report, specifically in referencing the PL/SQL column headings I have.
    Basically I have a report that generates one row for each project a person belongs to, and then using htmldb_item.text creates one field for each day of the week (sysdate - sysdate+6) so that people can enter their hours worked. The idea is they then press a submit button and the hours are entered into a project table something like (date_worked, project_id, hours_worked), one row for each entry.
    So I have:
    for i in 1..HTMLDB_APPLICATION.G_F01.count
    loop
    ... err... here I want to insert into the table the values(column_header, project_id, HTMLDB_APPLICATION.G_F01(i)).. but I don't know how to access that column_header value.
    Is this possible and if so, how?
    Many thanks,
    Tosh.

    that gives me the values of the text fields, but what
    I'd like to insert is the value of the column
    header... so for example:Yes, I understood what you meant. I did have a differect project_id for each INSERT in my SQL above. I guess that should have been day_id
    Since you are generating the tabular form SQL manually, you know which htmldb_item.text index corresponds to which column (which represents day_id in your case). So, use this to write 6 INSERT statements, one for each day. day_id would be a number going from 0 thru 6 where 0 represents Sunday and 6 represents Saturday.
    Bottom line: This is like generating/updating a calendar, your column headings are always fixed (Sun thru Saturday), just the date they represent would change.

  • Dynamic Sql In Report

    Hello
    Can i use dynamic sql in report builder , so as to allow user-defined reports .
    Thanx
    Shrikant

    read in the help system about lexical variables (these are variables with & at the begining).
    So you can define a query as select &P_1 where you get P_1 as a parameter.

  • Classic Report CSV output failed to parse SQL query

    Hi,
    I'm trying to get a CSV output from a classic report. I'm generating the report based on a PL/SQL block that will return an SQL query. But when i download the CSV excel just gives me a:
    failed to parse SQL query:
    ORA-00936: Missing expression
    and shows me the query that the application is trying to parse. I'm also using bind variables (page items) in the PL/SQL block that is returning me the SQL query. I think that the reason that it fails to parse the query is that the query that is shown in excel has no bind variable values.
    Anyone got any ideas?

    Hi Arif,
    run your page in debug mode and check out the SQL statement which is actually executed for the report. That might help to diagnose what is going wrong.
    If you wish you can also post the report SQL statement which is getting executed.
    Regards
    Patrick
    My Blog: http://www.inside-oracle-apex.com
    APEX Plug-Ins: http://apex.oracle.com/plugins
    Twitter: http://www.twitter.com/patrickwolf

Maybe you are looking for

  • ISSUE IN THE TABLE CONTROL

    HAI FRIENDS, I HAVE DISPLAYED THE VALUES IN THE TABLE CONTROL I HAVE DEFINED 'CHECK'  FOR  SELECTING  THE FIELDS OF TABLE CONTROL THE ISSUE STARTS HERE WHEN I CHECK TOP FIELDS OF TABLE CONTROL THEN SCROLLED  VERTICALLY, THE TABLE CONTROL TO SELECT I.

  • Can I control two Macs with one keyboard & mouse simultaneously?

    I'm presently the operator and head audio tech for a major Off-Broadway show. I'm running the show on Ableton Live 6 through a Mac Mini, using a MOTU 828mkIII as the Firewire audio interface to the console. "Show control" is basically straight music

  • Credit Note Creation for Invoice of previous sytem

    Hi to everyone, An invoice was created on the previous system (Pastel) and now the client is returning the goods. How would I account for this return? A service credit Note? How to re integrate the stock (goods are coming back in stock) Thanks Kentis

  • Post previous year parked invoices (MIRO), but system regenerate new doc

    Dear all, I am trying to post previous year 2011 parked invoice document from MIRO. I changed the posting date and document date to this year 2011. When i click 'Post', i receive system message indicate that the previous parked document number was de

  • System time for Java Stack and ABAP Stack of PI

    HI,      We have a scenario in which we have a synchronous flow of data. In the forward flow we have used field UZEIT in an RFC Lookup to register the inbound time and in the reverse flow we have used current time function of SAP PI mapping. PI time