Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> Function in a view problem

Function in a view problem

From: Jamadagni, Rajendra <rajendra.jamadagni_at_espn.com>
Date: Tue, 20 Mar 2001 11:01:41 -0800
Message-ID: <F001.002D221F.20010320110551@fatcity.com>

Hi all,

One of our developer is testing a function as shown below and this function is used in a view. Just to see how many times the function is called, we have a dbms_output statement in the function body. I was surprised to find that the function gets called 3 times for each row.

Maybe the glaring truth is right in front of me, but I don't see it. For all that matters, "episode_airings" is a large table.

Please help .. why the function is being called 3 times? I also traced it with dbms_pipe, all the input parameters are same for all the threee calls.

<package>
CREATE OR REPLACE PACKAGE DBPK_raj_TEST1 IS function getnumber(nemp in number, nNumber IN number) return number; PRAGMA RESTRICT_REFERENCES (GetNumber,WNDS); END DBPK_raj_TEST1;
/

CREATE OR REPLACE PACKAGE BODY DBPK_raj_TEST1 IS function getnumber(nemp in number, nNumber In Number) return number is x number;
BEGIN
  dbms_output.put_line ('In Procedure' || to_char(nNumber));   sendtracemessage('VIEW: ' || to_char(nemp) || ' - ' || to_char(nnumber) || ' - ' || to_char(nnumber+1));
  Return (nNumber + 1);
END getnumber;

--
END DBPK_raj_test1;
/
</package>

<view>
create or replace view raj_test (dept_no, rn, pkg_rtn) as
select ep_number Dept_no, rownum rn, dbpk_raj_test1.getnumber(ep_number,
rownum) pkg_rtn
from episode_airings where rownum < 10
</view>

<script>
Declare
cursor c is select dept_no, rn, pkg_rtn from raj_test;
n1 number := 0;
n2 number := 0;
n3 number := 0;
begin
dbms_output.enable(100000);
dbms_output.put_line ('$$$$$$$$$$$$$$$$$$$');
dbms_output.put_line ('$ For Loop Cursor $');
dbms_output.put_line ('$$$$$$$$$$$$$$$$$$$');
for r in c loop
n1 := c%rowcount;
dbms_output.put_line ('$ Loop Counter ' || to_char(n1));
dbms_output.put_line ('$     value ' || to_char(r.dept_no) || ' - ' ||
                      to_char(r.rn) || ' - ' ||  to_char(r.pkg_rtn));
end loop;
/
</script>

<explain plan>
SELECT STATEMENT Optimizer=RULE
  VIEW OF RAJ_TEST
    COUNT (STOPKEY)
      TABLE ACCESS (FULL) OF EPISODE_AIRINGS
</explain plan>

<output>
SQL> @raj
$$$$$$$$$$$$$$$$$$$

$ For Loop Cursor $
$$$$$$$$$$$$$$$$$$$ In Procedure1 In Procedure1 In Procedure1
$ Loop Counter 1
$ value 32635 - 1 - 2
In Procedure2 In Procedure2 In Procedure2
$ Loop Counter 2
$ value 32636 - 2 - 3
In Procedure3 In Procedure3 In Procedure3
$ Loop Counter 3
$ value 32637 - 3 - 4
In Procedure4 In Procedure4 In Procedure4
$ Loop Counter 4
$ value 32638 - 4 - 5
In Procedure5 In Procedure5 In Procedure5
$ Loop Counter 5
$ value 32639 - 5 - 6
In Procedure6 In Procedure6 In Procedure6
$ Loop Counter 6
$ value 32640 - 6 - 7
In Procedure7 In Procedure7 In Procedure7
$ Loop Counter 7
$ value 32641 - 7 - 8
In Procedure8 In Procedure8 In Procedure8
$ Loop Counter 8
$ value 32642 - 8 - 9
In Procedure9 In Procedure9 In Procedure9
$ Loop Counter 9
$ value 32643 - 9 - 10
</output> Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production TIA Raj ______________________________________________________ Rajendra Jamadagni MIS, ESPN Inc. Rajendra dot Jamadagni at ESPN dot com Any opinion expressed here is personal and doesn't reflect that of ESPN Inc. QOTD: Any clod can have facts, but having an opinion is an art ! ********************************************************************* This e-mail message is confidential, intended only for the named recipient(s) above and may contain information that is privileged, attorney work product or exempt from disclosure under applicable law. If you have received this message in error, or are not the named recipient(s), please immediately notify ESPN at (860) 766-2000 and delete this e-mail message from your computer, Thank you. ********************************************************************* -- Please see the official ORACLE-L FAQ: http://www.orafaq.com -- Author: Jamadagni, Rajendra INET: rajendra.jamadagni_at_espn.com Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).
Received on Tue Mar 20 2001 - 13:01:41 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US