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,
valerthanks 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 advanceyou 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'??
TomThere 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
AlakaHi 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 -
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?
ThanksYou 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.
LeahHi 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 PMKhaja,
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
SUNCheck 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
-
Only way to stop bonjour erros was to stop bonjour via services windows 7
never had an iTunes issue with any version until i jumped on 9.1.079 what stupid choice as while windows sees my iphones 3gs and i always manage iphonemanualy there are some parts i do sync. first sign of trouble was right after installation i usuall
-
How to change data type and col. width of text item
hi, how will we change the datatype and width of a text item in runtime. set_item_property(itemname,fixed_length,20);--- it is for width. please help me. Regards
-
HT1473 How to I put an audio book from my computer onto my iPod touch4
Hi, I got an audio book from my library and want to put it onto my iPod but I'm not sure how to. I downloaded the book onto my computer It's an odm file if that helps And the website said it was compadable with iPods But when I hook my iPod up to the
-
OT - For those of us who need a break...
It's probably true *LOL*
-
RG23A Part II: Ii the Sum of Ecess and HECess column missing last value
All SAP Gurus, In RG23A Part II register, in the total column, all the values of BEB, ECess and HECess are displayed correctly. But the total of ECess and HECess sre coming wrong (last figure of every month is not considered in the total of that mont