在Oracle中分析存储的函数

前端之家收集整理的这篇文章主要介绍了在Oracle中分析存储的函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Oracle11g中是否可以分析从SELECT … INTO …语句中的plsql代码调用的存储函数

对于分析,我使用DBMS_HPROF实用程序.在DBMSHP_FUNCTION_INFO表中运行分析后,我可以看到除SELECT … INTO中调用函数之外的所有内容….

在11g2中,我的HPROF结果包括被称为包函数的行
SELECT my_pkg.my_func(x) INTO y FROM dual;

现在,我没有看到每一行 – 通常只有sql语句.例如,我在以下包中描述了“main_test”.

ALTER SESSION SET PLsql_OPTIMIZE_LEVEL=0;

CREATE OR REPLACE PACKAGE matt_t1 AS
  FUNCTION p (a NUMBER)
    RETURN NUMBER;

  PROCEDURE main_test;
END matt_t1;

CREATE OR REPLACE  TYPE my_num_tab_type IS TABLE OF NUMBER;

CREATE OR REPLACE PACKAGE BODY matt_t1 AS
  FUNCTION p (a NUMBER)
    RETURN NUMBER IS
    x   NUMBER := 0;
    t my_num_tab_type;
   BEGIN
     t := new my_num_tab_type();
      for i in 1..10000 loop
          x := ln (x+i);
          t.extend();
         t(i) := x;
     END loop;

     SELECT SUM(column_value) INTO x FROM TABLE(t); 
    RETURN x;
  END p;

  PROCEDURE main_test IS
    x   NUMBER;
  BEGIN
    FOR i IN 1 .. 100 LOOP
      x   := matt_t1.p (i);
       DBMS_OUTPUT.put_line (x);
    END LOOP;
  END main_test;
END matt_t1;

在HPROF结果中,我看到了条目

SELECT SUM(column_value) INTO x FROM TABLE(t);

但不是,例如,

x := ln (x+i);

如果我只是通过PL / sql直接赋值,那么我将函数p称为SELECT INTO vs得到相同的结果.无论哪种方式,10,000个自然对数的所有时间都在HPROF条目下进行

FUNCTION p (a NUMBER)

如果我直接调用MATT_T1.P()的调用,我也会得到相同的结果.

因此,我认为HPROF可能对它可以包含哪些PL / sql行有一些限制,但在我看来,调用方法(SELECT..INTO)与它无关.

猜你在找的Oracle相关文章