Saturday, 30 May 2009

Execute Javascript through PL/SQL

Sometimes, like in this case, where I needed to set the focus on load to a specific line in a table when inserting new rows, you need to execute javascript within your PL/SQL block. In this example in my Demo Application you will find an explanation of the code you need for that.




18 comments:

  1. Hi Denes,

    Just to be pedantic, the Javascript is not actually being executed by the PL/SQL, the PL/SQL is purely emitting the Javascript code (essentially text at this point) to the browser. The browser then interprets this code during the page rendering phase (rendering in the browser I mean).

    It might seem like a subtle difference, but I just wanted to point out that the Javascript is not running at the same time the PL/SQL code is running in this case.

    John.

    ReplyDelete
  2. Sure, but this is how this question will be asked and understood by the most. This is why I picked that title. Whoever reads the code will soon notice that there is no execution of the javascript through PL/SQL. PL/SQL is used to put the javascript code together and send it to the browser.

    ReplyDelete
  3. By the way, it's not that hard to really "execute javascript through PL/SQL". About a year ago, I loaded rhino into a 10.2.0.4 server and played with it a little bit. It never had any use except to prove to myself that I'm still a nerd ;-).

    ReplyDelete
  4. Hello Denes,
    I understood what u have specified, but I want to do some other thing, I want to run a sql query while checking a condition in javascript like this
    htp.p('if(v == true){');
    update aggrement set checked='y' where agg_no = :P2_AGG_NO;
    htp.p('}else{');
    update aggrement set checked='n' where agg_no = :P2_AGG_NO;
    htp.p('}');
    but it is not working. This always insert 'n' in "checked" column.
    Please Help me out on this.
    you can send me a mail on this on
    sheikh.tauceef@gmail.com
    Thanks.

    ReplyDelete
  5. I don't think you need javascript for that since this can be done in the query itself. See this example from Patrick Wolf:

    http://www.inside-oracle-apex.com/checkboxes-in-tabular-forms-the-easy-way/

    Denes Kubicek

    ReplyDelete
  6. actually i m doing this in a query only see this whole logic

    Declare
    Cursor agg is
    select Agg_no,client.Client_name clientn,End_date from AGGREMENT,client WHERE client.client_id = aggrement.client_id;
    Begin
    for agrmt in agg loop
    :P2_END_DATE := agrmt.End_date;
    :P2_AGG_NO := agrmt.Agg_no;
    :P2_CLIENT_NAME := agrmt.clientn;
    if to_date(agrmt.End_date,'dd-mon-rr') <= to_date(SYSDATE,'dd-mon-rr') THEN
    htp.p('open script);
    htp.p('pop('''
    || :P2_AGG_NO
    || ''','''
    || :P2_END_DATE
    || ''','''
    || :P2_CLIENT_NAME
    || ''');');
    htp.p('if(v == true){');
    update aggrement set checked='y' where agg_no = :P2_AGG_NO;
    htp.p('}else{');
    update aggrement set checked='n' where agg_no = :P2_AGG_NO;
    htp.p('}close script');
    end if;
    end loop;
    End;

    This is my whole logic where I am calling a javascript function from select query from that function I m getting the value of 'v' which is a boolean variable and after checking this variable's value I want to update my table accordingly.

    this is the Pop function:

    var v;
    function pop(ag_no,end_dt,clnt_nm)
    {
    v = confirm("Aggrement: " + ag_no + " with Client: " + clnt_nm + " is going to end on " + end_dt + " Date.");
    }


    For this either I need to run the update table qurery under javascript or I can reffer the javascript variable 'v' into my pl/sql function.

    ReplyDelete
  7. Sir please reply soon, Because I need it in my project on which I am working.

    Waiting for your reply..

    ReplyDelete
  8. I am sorry but I still do not understand your requirement. I see your statement but I don't see what exactly you want to do with it.

    Denes Kubicek

    ReplyDelete
  9. Actually I have a Confirm Box,
    which will get popped up when the aggrement end date is less than or equal to today's date, through that confirm box I am getting the value in variable "v" as true or false(after user pressed OK or CANCEL). After checking this value I want to update my "Aggrement" table.

    So my problem is that the variable "v" is a Javascript variable and I want to update my table after checking this variable's value.

    If u can tell me how can I access the variable "v" in PL/SQL function? If I can't do this than tell me can I run my update query in javascript after checking the value of "v".

    Hope this explanation helps u understand my problem.

    Thanks for helping me out. Please see if u can reply soon.

    ReplyDelete
  10. If you want you can check this in my workspace

    Login Information:
    workspace:tauceef
    username:denes
    password:denes

    Application: Sales Management-2098
    Page:Aggrement(page no.2)

    ReplyDelete
  11. Sorry I forgot to mention
    You can login on
    apex.oracle.com/pls/apex using above login information

    ReplyDelete
  12. I will have a look at it when I have time. I am currently bussy with my daily stuff.

    Denes Kubicek

    ReplyDelete
  13. hi denes,

    how it possible to show a "user choice confirmation message" during a pl/sql process..?

    ReplyDelete
  14. Hi

    I have the same question that Nipun

    I try to execute sql after a javascript confirm


    htp.p('if (confirm("Do you want to delete your record?")) {' );
    delete emp where emp_id = :P1_EMP_ID; );
    commit;
    htp.p('}');


    But the delete will be execute at each time.

    ReplyDelete
  15. I find something like that

    If you cancel return to your page else delete the row

    htp.p('if (!confirm("Do you want to delete your record?")) {' );
    htp.p('redirect("f?p=&APP_ID.:1:&APP_SESSION.")');
    htp.p('}');

    htp.p('alert("delete in progress : ");' );

    delete emp where emp_id = :P1_EMP_ID;
    commit;

    ReplyDelete






  16. interesting piece of information, I had come to know about your web-page from my friend pramod, jaipur,i have read atleast eight posts of yours by now, and let me tell you, your blog gives the best and the most interesting information. This is just the kind of information that i had been looking for, i'm already your rss reader now and i would regularly watch out for the new posts, once again hats off to you! Thanks a million once again, Regards, sql and plsql difference


    ReplyDelete
  17. thanks for sharing this article.its useful.Angular training in Chennai

    ReplyDelete