Calling function in PL/SQL

Hello everyone,
I would like to know if there is anyway to call a user defined function in an SQL statement from a PL/SQL anonymous block without first creating that function to the database.
For instance:
I have a pl/sql block:
DECLARE
BEGIN
UPDATE Request SET map_No = nts_map_no(parm1, parm2, parm3) WHERE ...
END;
I have tried declaring the function within the declare section of the block as in:
DECLARE
FUNCTION nts_map_no
End nts_map_no;
BEGIN
UPDATE Request SET map_No = nts_map_no(parm1, parm2, parm3) WHERE ...
END;
But Oracle wouldn't allow me to use it in an Update statement.
Thank you.

The this might be you are looking for ->
satyaki>
satyaki>select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
Elapsed: 00:00:00.30
satyaki>
satyaki>
satyaki>create table bu_cacy
  2     as
  3       select empno, ename
  4       from emp
  5       where 1=2;
Table created.
Elapsed: 00:00:15.38
satyaki>
satyaki>select * from bu_cacy;
no rows selected
Elapsed: 00:00:00.55
satyaki>
satyaki>
satyaki>
satyaki>declare
  2    a  varchar2(350);
  3    b  number(5);
  4    c  varchar2(350);
  5   
  6    function gg_fin(a_str in varchar2)
  7    return varchar2
  8    is
  9      str  varchar2(300);
10    begin
11      str := 'IFA-'||a_str;
12      return str;
13    end;
14  begin
15    b := #
16    a := '&str';
17   
18    c:= gg_fin(a) ;
19           
20    insert into bu_cacy values(b,c);
21    commit;
22  exception
23    when others then
24      rollback;
25  end;
26  /
Enter value for num: 1
old  15:   b := #
new  15:   b := 1;
Enter value for str: vivi
old  16:   a := '&str';
new  16:   a := 'vivi';
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.10
satyaki>
satyaki>select * from bu_cacy;
     EMPNO ENAME
         1 IFA-vivi
Elapsed: 00:00:00.14
satyaki>Regards.
Satyaki De.

Similar Messages

  • Call function from pl/sql when the name of funcion is in variable

    Hi,
    is it possible to do the following:
    I want to call (excute) a function within a pl/sql block, but the problem is that the name of the called function is stored in variable (is got as a parameter to mine pl/sql block).
    let's imagine:
    DECLARE
    name_of_function varchar2(10);
    result number;
    BEGIN
    result := ???name_of_function????;
    END;
    thanks for any suggestion,
    valer

    thanks for answer this exactly what i need.
    as i learned EXECUTE IMMEDIATELY does invoke pl/sql block dynamicaly.
    I tried it for invoking procedure. it woked fine. But not for function.
    So, does it work also for invoking FUNCTIONS ?

  • Calling function from PL/SQL block

    Hi,
    A very simple question.
    A have a function called "test1" in my database. It is there i double chekked.
    I would like to call this function from a block:
    DECLARE
    BEGIN
    TEST1(1202);
    END;
    This gives me an error.
    Why is this?

    user610868 wrote:
    Hi,
    A very simple question.
    A have a function called "test1" in my database. It is there i double chekked.
    I would like to call this function from a block:
    DECLARE
    BEGIN
    TEST1(1202);
    END;
    This gives me an error.
    Why is this?Hello
    A very very basic thing to do when you get an error is to include details of it. That helps narrow it down from one of the 1000s of potential Oracle errors it could be.
    Anyway, a function returns a value, and in PL/SQL you need to capture that otherwise you'll get "an error". Modify your code like so
    DECLARE
       l_Test1Val     VARCHAR2(4000); --CHANGE THIS TO BE THE SAME AS THE RETURN TYPE FOR YOUR FUNCTION
    BEGIN
       l_Test1Val :=  TEST1(1202);
    END;HTH
    David
    Edited by: Bravid on Oct 25, 2011 3:57 PM
    removed a ;

  • Calling a PL/SQL function in the SQL statement

    I have a PL/SQL function which i should call in a SQL statement.
    Let's say the function is func1(parameter1,parameter2),
    it should be called like this :- SELECT func1() FROM mytable ;
    Can any one help me out on this ?
    ---Thanx in advance

    you can call pl/sql functions from pl/sql using
    select fn1('param1','param2') from table;
    if you dont want to pass paramters, you have to specify default
    value while creating function like below
    create function fn1(p1 number default null,p2 varchar2 default
    null) return...
    now you can call using
    select fn1 from table;

  • Calling JS function in pl/sql process

    Hello!
    I have a js function defined in 'HTML Header' :
    <script language="JavaScript" type="text/javascript">
    function disp_alert()
    alert("Data is invalid! Correct the data and click CONFIRM again.")
    </script>
    I also have a pl/sql process on this page. I want to call disp_alert function in a following way:
    if ... then call function
    else dbms_output.put_line('...');
    end if;
    How can I call this js function in 'if'??
    Tom

    There ARE ways to accomplish something like this, but they're much more complex.
    You must create a JavaScript that uses APEX's built in AJAX components; a form button will call the JavaScript, which will in turn call a PL/SQL procedure saved as an "On Demance Shared Application Process." This procedure can run any checks you like against the DB, and return data to the Javascript to display in an alert.
    You can see an example of this in use at an APEX page I created: http://htmldb.oracle.com/pls/otn/f?p=19864:5
    This isn't the same thing, but is accomplishing what it does through an APEX form, a javascript call on the text field to a PL/SQL Process that returns rows from the database dynamically...thus allowing the client side JavaScript to call server side PL/SQL.

  • How to call javascript function from PL/SQL procedure

    Can anybody advice me how to call javascript function from PL/SQL procedure in APEX?

    Hi,
    I have a requirement to call Javascript function inside a After Submit Process.
    clear requirement below:
    1. User selects set of check boxes [ say user want to save 10 files and ticks 10 checkboxes]
    2. user clicks on "save files" button
    3. Inside a After submit process, in a loop, i want to call a javascript function for each of the file user want to save with the filename as a parameter.
    Hope this clarify U.
    Krishna.

  • How to call a function with pl/sql

    How does one call a function with pl/sql that uses a function?

    Hi,
    How does one call a function with pl/sql that uses a
    function?I'm not sure what you mean.
    In PL/SQL function can be used just about anywhere where an expression (with the same data type that the function returns). Arpit gave a very common example.
    Here's another example, where all the functions take a single NUMBER argument and return a NUMBER, so they can all be used in places where NUMBERs are used:
    IF  fun_a (fun_b (0)) < fun_c (1)
    THEN
        UPDATE  table_x
        SET     column_y = fun_d (2)
        WHERE   column_z = fun_e (ROUND ((fun_f (3), fun_g (4)));You call a function simply by using its name, followed by its argument list, if any.
    If the function is in a package, you must call it with the package name, like "pk_foo.bar (1, 2, 3)", unless the call comes from within the same package.
    If the function is owned by someone else, you must give the owner name, like "scott.bar (SYSDATE)" or "scott.pk_foo.bar (1, 2, 3)". You can create synonyms to avoid having to name the owner.

  • Error while calling the function which returns SQL Query!!!

    Hi,
    I have a Function which returns SQL query. I am calling this function in my APEX report region source.
    The query is dynamic SQL and its size varies based on the dynamic "where clause" condition.
    But I am not able to execute this function.It gives me the following error in APEX region source.
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Even in SQL* Plus or SQL developer also same error .
    The length of my query is more than 4000. I tried changing the variable size which holds my query in the function.
    Earlier it was
    l_query varchar2(4000)
    Now I changed to
    l_query varchar2(32767).
    Still it is throwing the same error.
    Can anybody help me to resolve this.???
    Thanks
    Alaka

    Hi Varad,
    I am already using 32k of varchar2. Then also it is not working.
    It is giving the same error. I think there is something to do with buffer size.
    My query size is not more than 4200. Even if i give 32k of varchar2 also buffer is able to hold only 3997 size of the query only.
    Error is
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Tried CLOB also. It is not working.
    Any other solution for this.
    Thanks
    Alaka

  • Call function in sql

    HI all,
    If I have function as
    create or replace function func(id)
    return number
    as
    begin
    loop
    loop
    ......does some calculations....
    end loop
    amt:=........
    end loop
    return amt
    end
    now if ihave a query as
    select id,gp from t;
    id gp
    1 20
    2 40
    Now iwant the amt calculated in function func to be displayed as another column in the query as:
    select id,gp,func(id) from t;
    id gp func(id)
    1 20 100
    2 40 300
    How to achieve this?
    Thanks

    You can simply call the function in your query:
    SQL> create table t as
      2  select 1 id, 20 gp from dual union
      3  select 2, 40 from dual;
    Table created.
    SQL> create or replace function func(p_id in number)
      2  return number
      3  as
      4   amt number;
      5  begin
      6    ---do your own thing here, I just made something up here:
      7    for i in 1..p_id*5
      8    loop
      9      amt := 10*i;
    10    end loop;
    11    return amt;
    12  end;
    13  /
    Function created.
    SQL> select id
      2  ,      gp
      3  ,      func(id)
      4  from   t;
            ID         GP   FUNC(ID)
             1         20         50
             2         40        100
    2 rows selected.More explanations:
    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1547006324238

  • Calling function from sql folder vs report

    Hi,
    A report based on a custom sql folder is taking a long time to run. One of the things that I noticed is that when I run the sql in plsql it takes a long time, but if I remove the row where I call a function, it runs pretty quickly.
    In general, is there a difference between running a function from the sql custom folder and calling it from the report itself?
    Thanks.
    Leah

    Hi Tamir,
    I might check out the execution plans, but truthfully, understanding the plans and the meaning of the differences is not my strong point.
    I thought that maybe there was some general rule that, for instance, it is better to keep functions out of the sql folder and use them in a condition in the report itself, or the opposite, or that maybe it makes no difference at all.
    I appreciate the response.
    Thanks.
    Leah

  • Calling Java function thru PL-SQL

    Dear all
    As i am New to JAVA ,Can you plz Tell how we can call Java function thru PL-SQL?
    To activate / deactivate function will be called from the database plug-ins. No need for GUI.
    Using the URL ,The objective is to automate this function.
    Many Thanks
    Edited by: khaja on Jan 18, 2009 12:50 PM

    Khaja,
    Please refer to http://download.oracle.com/docs/cd/B19306_01/java.102/b14187/chthree.htm#CACICFFB
    Please try to avoid asking questions for which you can easily find the answer yourself.
    I had to look this up, and found it in less than 2 minutes.
    Sybrand Bakker
    Senior Oracle DBA

  • Calling Javascript function from PL/SQL Process

    I am new to APEX and Javascript so please forgive my question.
    I have a process on page which successfully runs a few procedures etc. but now, as part of this process, I want to call a javascript function I have typed into the HTML Header.
    My question is how can I call the javascript function from my process? Is it possible?
    Many thanks
    Winnie
    ps. as an example my javascript looks like:
    <script language="JavaScript">
    function test(){
    var decision = confirm("Click a button below and watch what pops up next.");
    alert(decision);
    </script>

    See: How to call a javascript function from pl/sql?

  • Getting session hang When calling Function from SQL query

    Hi All,
    I am using Oracle 8.1.7.4.0. I have a fucntion in a Package and I am calling it from the SQL query. When I am firing the query my oracle session is going to hang position and I am not able to any thing. I have to kill the session.
    But this same thing is working fine in Oracle 9.i.
    There are no out parameter and no DML, DDL and DCL statement in this fucntion.
    Could you please get back me what is the problem on it.
    Regards
    SUN

    Check why your session hangs.
    Just a few ideas:
    * Blocking locks?
    * Endless loop?
    * Performance (maybe it is just slow in orac8i and you have to wait a bit longer). Check the execution plans of the SQL statements in your function.
    * Don't use a function, but direct SQL, it is faster in both versions.

  • Function called by what PL SQL procedure

    Hello.
    I want to see all the callers of a PL SQL function. I know it is called by some PL SQL procedures in a package. How do I see who calls the function?
    Thanks.

    i think you can try this : select * from
    user_dependencies where type = 'FUNCTION' actually, that what should what things are referenced by your function
    and you'd be better off with ALL_DEPENDENCIES, since references can cross schemas.
    select name, type from all_dependencies
    where referenced_owner= 'ME'
    and referenced_name= 'MY_FUNCTION'
    and referenced_type ='FUNCTION'
    this will show what other things are using your function. if it's used by a package, it will not show the exact procedure or function within that package.

  • Timing of Report (function body returning sql) w/ pagination

    Hey -
    Wondered if someone can provide some insight here...
    I have a report that is dynamically created by calling a function that returns sql. Since it may return a few hundred results I have pagination turned on allowing the user to choose rows per page, and am showing X-Y with next/prev links.
    Before displaying the report the user has to choose some criteria to narrow down the result set - I'm finding something that I think is a bit strange in that it takes more time for the page to render when zero results are found vs. 100's of results. If I run the function and take the sql it creates, I can return 0 rows in .2 seconds and 508 rows in .5 seconds so I think the sql itself is fine. Other than debugging timings, how can I find out what is taking so long?
    Debug for 0 results:
    0.07: Region: Program Forecast (viewing SAVED values)
    5.14: show report
    5.15: determine column headings
    5.15: parse query as: ####
    5.15: print column headings
    5.15: rows loop: 15 row(s)
    10.32: Computation point: AFTER_BOX_BODY
    Debug for 508 results (in chunks of 15):
    0.07: Region: Program Forecast (viewing SAVED values)
    2.76: show report
    2.76: determine column headings
    2.77: parse query as: ####
    2.94: print column headings
    2.94: rows loop: 15 row(s)
    6.52: Computation point: AFTER_BOX_BODY
    So it took only 6.5 seconds to pull 508 rows, look at my pagination and pull the first x rows, but 10.32 seconds to pull 0 rows and show me the no data found message. Even stranger is that in the 0 rows result it looped and took 5 seconds before it hit the next point (5 seconds doing what??)
    Any ideas? I'm a little baffled here...I guess the next step is to trace it but I wanted to see if anyone had any ideas in the interim.

    Where is the embarrassed icon?
    After painstakingly copying over each item to a new page to test, I figured out performance starting sucking big time once I put a button out there that apparently had a less than optimal exists clause in it.
    D'oh!

Maybe you are looking for