<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FPL_SQL%2FUtility_Package</id>
		<title>Oracle PL/SQL/PL SQL/Utility Package - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FPL_SQL%2FUtility_Package"/>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Utility_Package&amp;action=history"/>
		<updated>2026-05-24T14:55:45Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Utility_Package&amp;diff=1955&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Utility_Package&amp;diff=1955&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:45, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Utility_Package&amp;diff=1956&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Utility_Package&amp;diff=1956&amp;oldid=prev"/>
				<updated>2010-05-26T09:59:44Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Debug package==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE Debug AS&lt;br /&gt;
  2    PROCEDURE Debug(p_Description IN VARCHAR2,&lt;br /&gt;
  3                    p_Value IN VARCHAR2);&lt;br /&gt;
  4&lt;br /&gt;
  5    PROCEDURE Reset;&lt;br /&gt;
  6  END Debug;&lt;br /&gt;
  7  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY Debug AS&lt;br /&gt;
  2    PROCEDURE Debug(p_Description IN VARCHAR2,&lt;br /&gt;
  3                    p_Value IN VARCHAR2) IS&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5      DBMS_OUTPUT.PUT_LINE(p_Description || &amp;quot;: &amp;quot; || p_Value);&lt;br /&gt;
  6    END Debug;&lt;br /&gt;
  7&lt;br /&gt;
  8    PROCEDURE Reset IS&lt;br /&gt;
  9    BEGIN&lt;br /&gt;
 10      DBMS_OUTPUT.DISABLE;&lt;br /&gt;
 11      DBMS_OUTPUT.ENABLE(1000000);&lt;br /&gt;
 12    END Reset;&lt;br /&gt;
 13  BEGIN /* Package initialization code */&lt;br /&gt;
 14    Reset;&lt;br /&gt;
 15  END Debug;&lt;br /&gt;
 16  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Debug package based on UTL_FILE==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
CREATE OR REPLACE PACKAGE Debug AS&lt;br /&gt;
  v_DebugDir VARCHAR2(50);&lt;br /&gt;
  v_DebugFile VARCHAR2(20);&lt;br /&gt;
  PROCEDURE Debug(p_Description IN VARCHAR2,&lt;br /&gt;
                  p_Value IN VARCHAR2);&lt;br /&gt;
  PROCEDURE Reset(p_NewFile IN VARCHAR2 := v_DebugFile,&lt;br /&gt;
                  p_NewDir IN VARCHAR2 := v_DebugDir) ;&lt;br /&gt;
  PROCEDURE Close;&lt;br /&gt;
END Debug;&lt;br /&gt;
/&lt;br /&gt;
CREATE OR REPLACE PACKAGE BODY Debug AS&lt;br /&gt;
  v_DebugHandle UTL_FILE.FILE_TYPE;&lt;br /&gt;
  PROCEDURE Debug(p_Description IN VARCHAR2,p_Value IN VARCHAR2) IS&lt;br /&gt;
  BEGIN&lt;br /&gt;
    UTL_FILE.PUTF(v_DebugHandle, &amp;quot;%s: %s\n&amp;quot;, p_Description, p_Value);&lt;br /&gt;
    UTL_FILE.FFLUSH(v_DebugHandle);&lt;br /&gt;
  EXCEPTION&lt;br /&gt;
    WHEN UTL_FILE.INVALID_OPERATION THEN&lt;br /&gt;
      RAISE_APPLICATION_ERROR(-20102, &amp;quot;Debug: Invalid Operation&amp;quot;);&lt;br /&gt;
    WHEN UTL_FILE.INVALID_FILEHANDLE THEN&lt;br /&gt;
      RAISE_APPLICATION_ERROR(-20103, &amp;quot;Debug: Invalid File Handle&amp;quot;);&lt;br /&gt;
    WHEN UTL_FILE.WRITE_ERROR THEN&lt;br /&gt;
      RAISE_APPLICATION_ERROR(-20104, &amp;quot;Debug: Write Error&amp;quot;);&lt;br /&gt;
  END Debug;&lt;br /&gt;
  PROCEDURE Reset(p_NewFile IN VARCHAR2 := v_DebugFile,&lt;br /&gt;
                  p_NewDir IN VARCHAR2 := v_DebugDir) IS&lt;br /&gt;
  BEGIN&lt;br /&gt;
    IF UTL_FILE.IS_OPEN(v_DebugHandle) THEN&lt;br /&gt;
      UTL_FILE.FCLOSE(v_DebugHandle);&lt;br /&gt;
    END IF;&lt;br /&gt;
    v_DebugHandle := UTL_FILE.FOPEN(p_NewDir, p_NewFile, &amp;quot;w&amp;quot;);&lt;br /&gt;
    v_DebugFile := p_NewFile;&lt;br /&gt;
    v_DebugDir := p_NewDir;&lt;br /&gt;
  EXCEPTION&lt;br /&gt;
    WHEN UTL_FILE.INVALID_PATH THEN&lt;br /&gt;
      RAISE_APPLICATION_ERROR(-20100, &amp;quot;Reset: Invalid Path&amp;quot;);&lt;br /&gt;
    WHEN UTL_FILE.INVALID_MODE THEN&lt;br /&gt;
      RAISE_APPLICATION_ERROR(-20101, &amp;quot;Reset: Invalid Mode&amp;quot;);&lt;br /&gt;
    WHEN UTL_FILE.INVALID_OPERATION THEN&lt;br /&gt;
      RAISE_APPLICATION_ERROR(-20101, &amp;quot;Reset: Invalid Operation&amp;quot;);&lt;br /&gt;
  END Reset;&lt;br /&gt;
  PROCEDURE Close IS&lt;br /&gt;
  BEGIN&lt;br /&gt;
    UTL_FILE.FCLOSE(v_DebugHandle);&lt;br /&gt;
  END Close;&lt;br /&gt;
BEGIN&lt;br /&gt;
  v_DebugDir := &amp;quot;/tmp&amp;quot;;&lt;br /&gt;
  v_DebugFile := &amp;quot;debug.out&amp;quot;;&lt;br /&gt;
  Reset;&lt;br /&gt;
END Debug;&lt;br /&gt;
/&lt;br /&gt;
show error&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Debug package: inserts into a test table==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE debug_table (&lt;br /&gt;
  2    linecount  NUMBER PRIMARY KEY,&lt;br /&gt;
  3    debug_str  VARCHAR2(200));&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE Debug AS&lt;br /&gt;
  2    PROCEDURE Debug(p_Description IN VARCHAR2, p_Value IN VARCHAR2);&lt;br /&gt;
  3&lt;br /&gt;
  4    PROCEDURE Reset;&lt;br /&gt;
  5  END Debug;&lt;br /&gt;
  6  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY Debug AS&lt;br /&gt;
  2    v_LineCount NUMBER;&lt;br /&gt;
  3&lt;br /&gt;
  4    PROCEDURE Debug(p_Description IN VARCHAR2, p_Value IN VARCHAR2) IS&lt;br /&gt;
  5    BEGIN&lt;br /&gt;
  6      INSERT INTO debug_table (linecount, debug_str)&lt;br /&gt;
  7        VALUES (v_LineCount, p_Description || &amp;quot;: &amp;quot; || p_Value);&lt;br /&gt;
  8      COMMIT;&lt;br /&gt;
  9      v_LineCount := v_LineCount + 1;&lt;br /&gt;
 10    END Debug;&lt;br /&gt;
 11&lt;br /&gt;
 12    PROCEDURE Reset IS&lt;br /&gt;
 13    BEGIN&lt;br /&gt;
 14      v_LineCount := 1;&lt;br /&gt;
 15      DELETE FROM debug_table;&lt;br /&gt;
 16    END Reset;&lt;br /&gt;
 17&lt;br /&gt;
 18  BEGIN&lt;br /&gt;
 19    Reset;&lt;br /&gt;
 20  END Debug;&lt;br /&gt;
 21  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table debug_table;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Debug package: uses DBMS_OUTPUT.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE debug_table (&lt;br /&gt;
  2    linecount  NUMBER PRIMARY KEY,&lt;br /&gt;
  3    debug_str  VARCHAR2(200));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE Debug AS&lt;br /&gt;
  2    PROCEDURE Debug(p_Description IN VARCHAR2, p_Value IN VARCHAR2);&lt;br /&gt;
  3&lt;br /&gt;
  4    PROCEDURE Reset;&lt;br /&gt;
  5  END Debug;&lt;br /&gt;
  6  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY Debug AS&lt;br /&gt;
  2    PROCEDURE Debug(p_Description IN VARCHAR2,&lt;br /&gt;
  3                    p_Value IN VARCHAR2) IS&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5      DBMS_OUTPUT.PUT_LINE(p_Description || &amp;quot;: &amp;quot; || p_Value);&lt;br /&gt;
  6    END Debug;&lt;br /&gt;
  7&lt;br /&gt;
  8    PROCEDURE Reset IS&lt;br /&gt;
  9    BEGIN&lt;br /&gt;
 10      DBMS_OUTPUT.DISABLE;&lt;br /&gt;
 11      DBMS_OUTPUT.ENABLE(1000000);&lt;br /&gt;
 12    END Reset;&lt;br /&gt;
 13&lt;br /&gt;
 14  BEGIN&lt;br /&gt;
 15    Reset;&lt;br /&gt;
 16  END Debug;&lt;br /&gt;
 17  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==stop_watch==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE stop_watch AS&lt;br /&gt;
  2     pv_start_time_num     PLS_INTEGER;&lt;br /&gt;
  3     pv_stop_time_num      PLS_INTEGER;&lt;br /&gt;
  4     pv_last_stop_time_num PLS_INTEGER;&lt;br /&gt;
  5  PROCEDURE start_timer;&lt;br /&gt;
  6  PROCEDURE stop_timer;&lt;br /&gt;
  7  END stop_watch;&lt;br /&gt;
  8  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY stop_watch AS&lt;br /&gt;
  2  PROCEDURE start_timer AS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4     pv_start_time_num     := DBMS_UTILITY.GET_TIME;&lt;br /&gt;
  5     pv_last_stop_time_num := pv_start_time_num;&lt;br /&gt;
  6  END start_timer;&lt;br /&gt;
  7&lt;br /&gt;
  8  PROCEDURE stop_timer AS&lt;br /&gt;
  9  BEGIN&lt;br /&gt;
 10     pv_stop_time_num := DBMS_UTILITY.GET_TIME;&lt;br /&gt;
 11     DBMS_OUTPUT.PUT_LINE(&amp;quot;Total Time Elapsed: &amp;quot; ||&lt;br /&gt;
 12        TO_CHAR((pv_stop_time_num - pv_start_time_num)/100,&lt;br /&gt;
 13        &amp;quot;999,999.99&amp;quot;) || &amp;quot; sec   Interval Time: &amp;quot; ||&lt;br /&gt;
 14        TO_CHAR((pv_stop_time_num - pv_last_stop_time_num)/100,&lt;br /&gt;
 15        &amp;quot;99,999.99&amp;quot;) || &amp;quot; sec&amp;quot;);&lt;br /&gt;
 16     pv_last_stop_time_num := pv_stop_time_num;&lt;br /&gt;
 17  END stop_timer;&lt;br /&gt;
 18  END;&lt;br /&gt;
 19  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE test_if (p_condition_num NUMBER) AS&lt;br /&gt;
  2     lv_temp_num         NUMBER := 0;&lt;br /&gt;
  3     lv_temp_cond_num    NUMBER := p_condition_num;&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5     stop_watch.start_timer;&lt;br /&gt;
  6     FOR lv_count_num IN 1..1000 LOOP&lt;br /&gt;
  7        IF lv_temp_cond_num = 1 THEN&lt;br /&gt;
  8           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
  9        ELSIF lv_temp_cond_num = 2 THEN&lt;br /&gt;
 10           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 11        ELSIF lv_temp_cond_num = 3 THEN&lt;br /&gt;
 12           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 13        ELSIF lv_temp_cond_num = 4 THEN&lt;br /&gt;
 14           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 15        ELSIF lv_temp_cond_num = 5 THEN&lt;br /&gt;
 16           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 17        ELSIF lv_temp_cond_num = 6 THEN&lt;br /&gt;
 18           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 19        ELSIF lv_temp_cond_num = 7 THEN&lt;br /&gt;
 20           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 21        ELSE&lt;br /&gt;
 22           lv_temp_num := lv_temp_num + 1;&lt;br /&gt;
 23        END IF;&lt;br /&gt;
 24     END LOOP;&lt;br /&gt;
 25     stop_watch.stop_timer;&lt;br /&gt;
 26  END;&lt;br /&gt;
 27  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==This object type represents a point on a Cartesian grid.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE Point AS OBJECT (&lt;br /&gt;
  2    x NUMBER,&lt;br /&gt;
  3    y NUMBER,&lt;br /&gt;
  4&lt;br /&gt;
  5    MEMBER FUNCTION ToString RETURN VARCHAR2,&lt;br /&gt;
  6    PRAGMA RESTRICT_REFERENCES(ToString, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
  7&lt;br /&gt;
  8    MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0,0))&lt;br /&gt;
  9      RETURN NUMBER,&lt;br /&gt;
 10    PRAGMA RESTRICT_REFERENCES(Distance, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 11&lt;br /&gt;
 12    MEMBER FUNCTION Plus(p IN Point) RETURN Point,&lt;br /&gt;
 13    PRAGMA RESTRICT_REFERENCES(Plus, RNDS, WNDS, RNPS, WNPS),&lt;br /&gt;
 14&lt;br /&gt;
 15    MEMBER FUNCTION Times(n IN NUMBER) RETURN Point,&lt;br /&gt;
 16    PRAGMA RESTRICT_REFERENCES(Times, RNDS, WNDS, RNPS, WNPS)&lt;br /&gt;
 17  );&lt;br /&gt;
 18  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt; show errors&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TYPE BODY Point AS&lt;br /&gt;
  2    MEMBER FUNCTION ToString RETURN VARCHAR2 IS&lt;br /&gt;
  3      myResult VARCHAR2(20);&lt;br /&gt;
  4      v_xString VARCHAR2(8) := SUBSTR(TO_CHAR(x), 1, 8);&lt;br /&gt;
  5      v_yString VARCHAR2(8) := SUBSTR(TO_CHAR(y), 1, 8);&lt;br /&gt;
  6    BEGIN&lt;br /&gt;
  7      myResult := &amp;quot;(&amp;quot; || v_xString || &amp;quot;, &amp;quot;;&lt;br /&gt;
  8      myResult := myResult || v_yString || &amp;quot;)&amp;quot;;&lt;br /&gt;
  9      RETURN myResult;&lt;br /&gt;
 10    END ToString;&lt;br /&gt;
 11&lt;br /&gt;
 12    MEMBER FUNCTION Distance(p IN Point DEFAULT Point(0,0))&lt;br /&gt;
 13      RETURN NUMBER IS&lt;br /&gt;
 14    BEGIN&lt;br /&gt;
 15      RETURN SQRT(POWER(x - p.x, 2) + POWER(y - p.y, 2));&lt;br /&gt;
 16    END Distance;&lt;br /&gt;
 17&lt;br /&gt;
 18    MEMBER FUNCTION Plus(p IN Point) RETURN Point IS&lt;br /&gt;
 19      myResult Point;&lt;br /&gt;
 20    BEGIN&lt;br /&gt;
 21      myResult := Point(x + p.x, y + p.y);&lt;br /&gt;
 22      RETURN myResult;&lt;br /&gt;
 23    END Plus;&lt;br /&gt;
 24&lt;br /&gt;
 25    MEMBER FUNCTION Times(n IN NUMBER) RETURN Point IS&lt;br /&gt;
 26      myResult Point;&lt;br /&gt;
 27    BEGIN&lt;br /&gt;
 28      myResult := Point(x * n, y * n);&lt;br /&gt;
 29      RETURN myResult;&lt;br /&gt;
 30    END Times;&lt;br /&gt;
 31  END;&lt;br /&gt;
 32  /&lt;br /&gt;
Type body created.&lt;br /&gt;
SQL&amp;gt; show errors&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_Point1 Point := Point(1, 2);&lt;br /&gt;
  3    v_Point2 Point;&lt;br /&gt;
  4    v_Point3 Point;&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6    v_Point2 := v_Point1.Times(4);&lt;br /&gt;
  7    v_Point3 := v_Point1.Plus(v_Point2);&lt;br /&gt;
  8    DBMS_OUTPUT.PUT_LINE(&amp;quot;Point 2: &amp;quot; || v_Point2.ToString);&lt;br /&gt;
  9    DBMS_OUTPUT.PUT_LINE(&amp;quot;Point 3: &amp;quot; || v_Point3.ToString);&lt;br /&gt;
 10    DBMS_OUTPUT.PUT_LINE(&amp;quot;Distance between origin and point 1: &amp;quot; ||&lt;br /&gt;
 11      v_Point1.Distance);&lt;br /&gt;
 12    DBMS_OUTPUT.PUT_LINE(&amp;quot;Distance between point 1 and point 2: &amp;quot; ||&lt;br /&gt;
 13      v_Point1.Distance(v_Point2));&lt;br /&gt;
 14  END;&lt;br /&gt;
 15  /&lt;br /&gt;
Point 2: (4, 8)&lt;br /&gt;
Point 3: (5, 10)&lt;br /&gt;
Distance between origin and point 1: 2.23&lt;br /&gt;
Distance between point 1 and point 2: 6.70&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==time the performance enhancements of native dynamic SQL.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE Timing AS&lt;br /&gt;
  2    PROCEDURE StartTiming;&lt;br /&gt;
  3    PROCEDURE StopTiming;&lt;br /&gt;
  4    PROCEDURE PrintElapsed(p_Message IN VARCHAR2);&lt;br /&gt;
  5  END Timing;&lt;br /&gt;
  6  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY Timing AS&lt;br /&gt;
  2    v_StartTime NUMBER;&lt;br /&gt;
  3    v_EndTime NUMBER;&lt;br /&gt;
  4&lt;br /&gt;
  5    PROCEDURE StartTiming IS&lt;br /&gt;
  6    BEGIN&lt;br /&gt;
  7      v_StartTime := DBMS_UTILITY.GET_TIME;&lt;br /&gt;
  8    END StartTiming;&lt;br /&gt;
  9&lt;br /&gt;
 10    PROCEDURE StopTiming IS&lt;br /&gt;
 11    BEGIN&lt;br /&gt;
 12      v_EndTime := DBMS_UTILITY.GET_TIME;&lt;br /&gt;
 13    END StopTiming;&lt;br /&gt;
 14&lt;br /&gt;
 15    PROCEDURE PrintElapsed(p_Message IN VARCHAR2) IS&lt;br /&gt;
 16      v_Elapsed NUMBER := (v_EndTime - v_StartTime) / 100;&lt;br /&gt;
 17    BEGIN&lt;br /&gt;
 18      DBMS_OUTPUT.PUT_LINE(&lt;br /&gt;
 19        &amp;quot;Elapsed Time for &amp;quot; || p_Message || &amp;quot; is &amp;quot; ||&lt;br /&gt;
 20        v_Elapsed  || &amp;quot; seconds.&amp;quot;);&lt;br /&gt;
 21    END PrintElapsed;&lt;br /&gt;
 22  END Timing;&lt;br /&gt;
 23  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE MyTable (&lt;br /&gt;
  2    num_col    NUMBER,&lt;br /&gt;
  3    char_col   VARCHAR2(60)&lt;br /&gt;
  4    );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; TRUNCATE TABLE MyTable;&lt;br /&gt;
Table truncated.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_CursorID INTEGER;&lt;br /&gt;
  3    v_Dummy NUMBER;&lt;br /&gt;
  4    v_SQLStatement VARCHAR2(100) := &amp;quot;INSERT INTO MyTable (num_col) VALUES (:num)&amp;quot;;&lt;br /&gt;
  5&lt;br /&gt;
  6    c_NumRows CONSTANT NUMBER := 5000;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    DELETE FROM MyTable;&lt;br /&gt;
  9    COMMIT;&lt;br /&gt;
 10&lt;br /&gt;
 11    Timing.StartTiming;&lt;br /&gt;
 12    v_CursorID := DBMS_SQL.OPEN_CURSOR;&lt;br /&gt;
 13&lt;br /&gt;
 14    FOR v_Count IN 1..c_NumRows LOOP&lt;br /&gt;
 15      DBMS_SQL.PARSE(v_CursorID, v_SQLStatement, DBMS_SQL.NATIVE);&lt;br /&gt;
 16      DBMS_SQL.BIND_VARIABLE(v_CursorID, &amp;quot;:num&amp;quot;, v_Count);&lt;br /&gt;
 17      v_Dummy := DBMS_SQL.EXECUTE(v_CursorID);&lt;br /&gt;
 18    END LOOP;&lt;br /&gt;
 19&lt;br /&gt;
 20    DBMS_SQL.CLOSE_CURSOR(v_CursorID);&lt;br /&gt;
 21&lt;br /&gt;
 22    Timing.StopTiming;&lt;br /&gt;
 23    Timing.PrintElapsed(&amp;quot;DBMS_SQL&amp;quot;);&lt;br /&gt;
 24&lt;br /&gt;
 25    DELETE FROM MyTable;&lt;br /&gt;
 26    COMMIT;&lt;br /&gt;
 27&lt;br /&gt;
 28    Timing.StartTiming;&lt;br /&gt;
 29    FOR v_Count IN 1..c_NumRows LOOP&lt;br /&gt;
 30      EXECUTE IMMEDIATE v_SQLStatement USING v_Count;&lt;br /&gt;
 31    END LOOP;&lt;br /&gt;
 32    Timing.StopTiming;&lt;br /&gt;
 33    Timing.PrintElapsed(&amp;quot;Native Dynamic SQL&amp;quot;);&lt;br /&gt;
 34  END;&lt;br /&gt;
 35  /&lt;br /&gt;
Elapsed Time for DBMS_SQL is 1.04 seconds.&lt;br /&gt;
Elapsed Time for Native Dynamic SQL is .52 seconds.&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table MyTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>