<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FFunction_Procedure_Packages%2FUtility_Procedure</id>
		<title>Oracle PL/SQL Tutorial/Function Procedure Packages/Utility Procedure - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL_Tutorial%2FFunction_Procedure_Packages%2FUtility_Procedure"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Utility_Procedure&amp;action=history"/>
		<updated>2026-04-04T19:04:09Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Utility_Procedure&amp;diff=4420&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Utility_Procedure&amp;diff=4420&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:46Z</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://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Utility_Procedure&amp;diff=4421&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/Function_Procedure_Packages/Utility_Procedure&amp;diff=4421&amp;oldid=prev"/>
				<updated>2010-05-26T10:11:55Z</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;== A package to calculate your age==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE datecalc&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     PROCEDURE showage (birthday_in IN DATE);&lt;br /&gt;
  4     PROCEDURE showage (birthday_in IN INTEGER);&lt;br /&gt;
  5     PROCEDURE showage (birthday_in IN VARCHAR2, mask_in IN VARCHAR2 := NULL);&lt;br /&gt;
  6  END datecalc;&lt;br /&gt;
  7  /&lt;br /&gt;
Package created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; show error&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PACKAGE BODY datecalc&lt;br /&gt;
  2  IS&lt;br /&gt;
  3     FUNCTION datestring (date_in IN DATE) RETURN VARCHAR2 IS&lt;br /&gt;
  4     BEGIN&lt;br /&gt;
  5       RETURN &amp;quot;You are &amp;quot; || ROUND (TO_NUMBER (SYSDATE - date_in)) || &amp;quot; days old.&amp;quot;;&lt;br /&gt;
  6     END datestring;&lt;br /&gt;
  7&lt;br /&gt;
  8     PROCEDURE showage (birthday_in IN DATE) IS&lt;br /&gt;
  9     BEGIN&lt;br /&gt;
 10        DBMS_OUTPUT.PUT_LINE (datestring (birthday_in));&lt;br /&gt;
 11     END showage;&lt;br /&gt;
 12&lt;br /&gt;
 13     PROCEDURE showage (birthday_in IN INTEGER) IS&lt;br /&gt;
 14     BEGIN&lt;br /&gt;
 15        showage (TO_DATE (birthday_in, &amp;quot;J&amp;quot;));&lt;br /&gt;
 16     END showage;&lt;br /&gt;
 17&lt;br /&gt;
 18     PROCEDURE showage (birthday_in IN VARCHAR2, mask_in IN VARCHAR2 := NULL) IS&lt;br /&gt;
 19     BEGIN&lt;br /&gt;
 20        IF mask_in IS NULL&lt;br /&gt;
 21        THEN&lt;br /&gt;
 22           showage (TO_DATE (birthday_in));&lt;br /&gt;
 23        ELSE&lt;br /&gt;
 24           showage (TO_DATE (birthday_in, mask_in));&lt;br /&gt;
 25        END IF;&lt;br /&gt;
 26     END showage;&lt;br /&gt;
 27  END datecalc;&lt;br /&gt;
 28  /&lt;br /&gt;
Package body created.&lt;br /&gt;
SQL&amp;gt; show error&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Create procedure for displaying long text line by line==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace procedure printLongText ( p_str in varchar2 )&lt;br /&gt;
  2  is&lt;br /&gt;
  3     l_str   long := p_str;&lt;br /&gt;
  4  begin&lt;br /&gt;
  5     loop&lt;br /&gt;
  6        exit when l_str is null;&lt;br /&gt;
  7        dbms_output.put_line( substr( l_str, 1, 250 ) );&lt;br /&gt;
  8        l_str := substr( l_str, 251 );&lt;br /&gt;
  9     end loop;&lt;br /&gt;
 10  end;&lt;br /&gt;
 11  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Disable trigger==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE settrig (tab IN VARCHAR2,action IN VARCHAR2) IS&lt;br /&gt;
  2     v_action VARCHAR2 (10) := UPPER (action);&lt;br /&gt;
  3     v_other_action VARCHAR2 (10) := &amp;quot;DISABLE&amp;quot;;&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5     IF v_action = &amp;quot;DISABLE&amp;quot;&lt;br /&gt;
  6     THEN&lt;br /&gt;
  7        v_other_action := &amp;quot;ENABLE&amp;quot;;&lt;br /&gt;
  8     END IF;&lt;br /&gt;
  9     FOR rec IN (SELECT trigger_name&lt;br /&gt;
 10                   FROM user_triggers&lt;br /&gt;
 11                  WHERE table_owner = USER&lt;br /&gt;
 12                    AND table_name = UPPER (tab)&lt;br /&gt;
 13                    AND status = v_other_action)&lt;br /&gt;
 14     LOOP&lt;br /&gt;
 15        EXECUTE IMMEDIATE &amp;quot;ALTER TRIGGER &amp;quot; || rec.trigger_name || &amp;quot; &amp;quot; || v_action;&lt;br /&gt;
 16        DBMS_OUTPUT.put_line (&amp;quot;Set status of &amp;quot; || rec.trigger_name || &amp;quot; to &amp;quot; || v_action);&lt;br /&gt;
 17     END LOOP;&lt;br /&gt;
 18  END;&lt;br /&gt;
 19  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Don&amp;quot;t display lines longer than 80 characters==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE println (val IN VARCHAR2)&lt;br /&gt;
  2  IS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4     IF LENGTH (val) &amp;gt; 80&lt;br /&gt;
  5     THEN&lt;br /&gt;
  6&lt;br /&gt;
  7        DBMS_OUTPUT.PUT_LINE (SUBSTR (val, 1, 80));&lt;br /&gt;
  8&lt;br /&gt;
  9        println (SUBSTR (val, 81));&lt;br /&gt;
 10&lt;br /&gt;
 11     ELSE&lt;br /&gt;
 12&lt;br /&gt;
 13        DBMS_OUTPUT.PUT_LINE (val);&lt;br /&gt;
 14&lt;br /&gt;
 15     END IF;&lt;br /&gt;
 16&lt;br /&gt;
 17  EXCEPTION&lt;br /&gt;
 18&lt;br /&gt;
 19     WHEN OTHERS&lt;br /&gt;
 20&lt;br /&gt;
 21     THEN&lt;br /&gt;
 22&lt;br /&gt;
 23        DBMS_OUTPUT.ENABLE (1000000);&lt;br /&gt;
 24&lt;br /&gt;
 25        println (val);&lt;br /&gt;
 26  END;&lt;br /&gt;
 27  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Dynamically perform any DDL statements from within your normal PL/SQL processing.==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE exec_ddl&lt;br /&gt;
  2     (p_statement_txt VARCHAR2) IS&lt;br /&gt;
  3     lv_exec_cursor_num    INTEGER := DBMS_SQL.OPEN_CURSOR;&lt;br /&gt;
  4     lv_rows_processed_num NUMBER := 0;&lt;br /&gt;
  5     lv_statement_txt      VARCHAR2(30000);&lt;br /&gt;
  6  BEGIN&lt;br /&gt;
  7     lv_statement_txt := p_statement_txt;&lt;br /&gt;
  8     DBMS_SQL.PARSE (lv_exec_cursor_num, lv_statement_txt,&lt;br /&gt;
  9        DBMS_SQL.NATIVE);&lt;br /&gt;
 10     lv_rows_processed_num := DBMS_SQL.EXECUTE (lv_exec_cursor_num);&lt;br /&gt;
 11     DBMS_SQL.CLOSE_CURSOR (lv_exec_cursor_num);&lt;br /&gt;
 12  EXCEPTION&lt;br /&gt;
 13     WHEN OTHERS THEN&lt;br /&gt;
 14        IF DBMS_SQL.IS_OPEN (lv_exec_cursor_num) THEN&lt;br /&gt;
 15           DBMS_SQL.CLOSE_CURSOR (lv_exec_cursor_num);&lt;br /&gt;
 16        END IF;&lt;br /&gt;
 17     RAISE;&lt;br /&gt;
 18  END exec_ddl;&lt;br /&gt;
 19  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Execuate the same SQL in two ways: static way and dynamic way==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,&lt;br /&gt;
  2                    ENAME VARCHAR2(10),&lt;br /&gt;
  3                    JOB VARCHAR2(9),&lt;br /&gt;
  4                    MGR NUMBER(4),&lt;br /&gt;
  5                    HIREDATE DATE,&lt;br /&gt;
  6                    SAL NUMBER(7, 2),&lt;br /&gt;
  7                    COMM NUMBER(7, 2),&lt;br /&gt;
  8                    DEPTNO NUMBER(2));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7369, &amp;quot;SMITH&amp;quot;, &amp;quot;CLERK&amp;quot;,    7902, TO_DATE(&amp;quot;17-DEC-1980&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 800, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7499, &amp;quot;ALLEN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698, TO_DATE(&amp;quot;20-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1600, 300, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7521, &amp;quot;WARD&amp;quot;,  &amp;quot;SALESMAN&amp;quot;, 7698, TO_DATE(&amp;quot;22-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 500, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7566, &amp;quot;JONES&amp;quot;, &amp;quot;MANAGER&amp;quot;,  7839, TO_DATE(&amp;quot;2-APR-1981&amp;quot;,  &amp;quot;DD-MON-YYYY&amp;quot;), 2975, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7654, &amp;quot;MARTIN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;28-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 1400, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7698, &amp;quot;BLAKE&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;1-MAY-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2850, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7782, &amp;quot;CLARK&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;9-JUN-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2450, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7788, &amp;quot;SCOTT&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;09-DEC-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7839, &amp;quot;KING&amp;quot;, &amp;quot;PRESIDENT&amp;quot;, NULL,TO_DATE(&amp;quot;17-NOV-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 5000, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7844, &amp;quot;TURNER&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;8-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1500, 0, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7876, &amp;quot;ADAMS&amp;quot;, &amp;quot;CLERK&amp;quot;, 7788,TO_DATE(&amp;quot;12-JAN-1983&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1100, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7900, &amp;quot;JAMES&amp;quot;, &amp;quot;CLERK&amp;quot;, 7698,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 950, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7902, &amp;quot;FORD&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES (7934, &amp;quot;MILLER&amp;quot;, &amp;quot;CLERK&amp;quot;, 7782,TO_DATE(&amp;quot;23-JAN-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1300, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set echo on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace procedure DynEmpProc( p_job in varchar2 )&lt;br /&gt;
  2  as&lt;br /&gt;
  3      type refcursor is ref cursor;&lt;br /&gt;
  4      l_cursor   refcursor;&lt;br /&gt;
  5      l_ename    emp.ename%type;&lt;br /&gt;
  6  begin&lt;br /&gt;
  7      open l_cursor for &amp;quot;select ename from emp where job = :x&amp;quot; USING in p_job;&lt;br /&gt;
  8&lt;br /&gt;
  9      loop&lt;br /&gt;
 10          fetch l_cursor into l_ename;&lt;br /&gt;
 11          exit when l_cursor%notfound;&lt;br /&gt;
 12&lt;br /&gt;
 13          dbms_output.put_line( l_ename );&lt;br /&gt;
 14      end loop;&lt;br /&gt;
 15      close l_cursor;&lt;br /&gt;
 16  exception&lt;br /&gt;
 17      when others then&lt;br /&gt;
 18          if ( l_cursor%isopen )&lt;br /&gt;
 19          then&lt;br /&gt;
 20              close l_cursor;&lt;br /&gt;
 21          end if;&lt;br /&gt;
 22          RAISE;&lt;br /&gt;
 23  end;&lt;br /&gt;
 24  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace procedure StaticEmpProc( p_job in varchar2 )&lt;br /&gt;
  2  as&lt;br /&gt;
  3  begin&lt;br /&gt;
  4      for x in ( select ename from emp where job = p_job )&lt;br /&gt;
  5      loop&lt;br /&gt;
  6          dbms_output.put_line( x.ename );&lt;br /&gt;
  7      end loop;&lt;br /&gt;
  8  end;&lt;br /&gt;
  9  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on size 1000000&lt;br /&gt;
SQL&amp;gt; exec DynEmpProc( &amp;quot;CLERK&amp;quot; )&lt;br /&gt;
SMITH&lt;br /&gt;
ADAMS&lt;br /&gt;
JAMES&lt;br /&gt;
MILLER&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt; exec StaticEmpProc( &amp;quot;CLERK&amp;quot; )&lt;br /&gt;
SMITH&lt;br /&gt;
ADAMS&lt;br /&gt;
JAMES&lt;br /&gt;
MILLER&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Procedure create_order==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE error_log(&lt;br /&gt;
  2     order_id    NUMBER(10)      NOT NULL,&lt;br /&gt;
  3     error_code  NUMBER NOT      NULL,&lt;br /&gt;
  4     error_text  VARCHAR2(1000)  NOT NULL,&lt;br /&gt;
  5     logged_user VARCHAR2(30)    NOT NULL,&lt;br /&gt;
  6     logged_date DATE            NOT NULL&lt;br /&gt;
  7  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE order_tab(&lt;br /&gt;
  2     order_id     NUMBER(10) PRIMARY KEY,&lt;br /&gt;
  3     order_date   DATE NOT NULL,&lt;br /&gt;
  4     total_qty    NUMBER,&lt;br /&gt;
  5     total_price  NUMBER(15,2),&lt;br /&gt;
  6     supp_id      NUMBER(6)&lt;br /&gt;
  7  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO order_tab VALUES (101,sysdate,100,750,1001);&lt;br /&gt;
1 row 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 OR REPLACE PROCEDURE log_error&lt;br /&gt;
  2                  (p_order_id NUMBER,&lt;br /&gt;
  3                   p_error_code NUMBER,&lt;br /&gt;
  4                   p_error_text VARCHAR2)&lt;br /&gt;
  5  IS&lt;br /&gt;
  6    PRAGMA AUTONOMOUS_TRANSACTION;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    INSERT INTO error_log VALUES (p_order_id,p_error_code,p_error_text,USER,SYSDATE);&lt;br /&gt;
  9    COMMIT;&lt;br /&gt;
 10  END;&lt;br /&gt;
 11  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE create_order(p_order_id NUMBER)&lt;br /&gt;
  2  IS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    INSERT INTO order_tab VALUES(p_order_id,SYSDATE,NULL,NULL,1001);&lt;br /&gt;
  5    COMMIT;&lt;br /&gt;
  6  EXCEPTION WHEN OTHERS THEN&lt;br /&gt;
  7    log_error(p_order_id,SQLCODE,SQLERRM);&lt;br /&gt;
  8    ROLLBACK;&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    PRAGMA AUTONOMOUS_TRANSACTION;&lt;br /&gt;
  3    FUNCTION dummy_log_error RETURN NUMBER;&lt;br /&gt;
  4    v_num NUMBER(1):=0;&lt;br /&gt;
  5    returnCode NUMBER :=dummy_log_error;&lt;br /&gt;
  6    FUNCTION dummy_log_error RETURN NUMBER&lt;br /&gt;
  7    IS&lt;br /&gt;
  8    BEGIN&lt;br /&gt;
  9      INSERT INTO error_log VALUES (-99,-99,&amp;quot;Dummy Error!&amp;quot;,USER,SYSDATE);&lt;br /&gt;
 10      RETURN (-99);&lt;br /&gt;
 11    END;&lt;br /&gt;
 12  BEGIN&lt;br /&gt;
 13    INSERT INTO error_log VALUES (v_num,v_num,&amp;quot;No Error!&amp;quot;,USER,SYSDATE);&lt;br /&gt;
 14    COMMIT;&lt;br /&gt;
 15  END;&lt;br /&gt;
 16  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table order_tab;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table error_log;&lt;br /&gt;
Table dropped.&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Returns the total from an order number being passed in.==&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;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE ord&lt;br /&gt;
  2  (order_id      NUMBER(7),&lt;br /&gt;
  3   customer_id   NUMBER(7),&lt;br /&gt;
  4   date_ordered  DATE,&lt;br /&gt;
  5   date_shipped  DATE,&lt;br /&gt;
  6   sales_rep_id  NUMBER(7),&lt;br /&gt;
  7   total         NUMBER(11, 2),&lt;br /&gt;
  8   payment_type  VARCHAR2(6),&lt;br /&gt;
  9   order_filled  VARCHAR2(1)&lt;br /&gt;
 10  );&lt;br /&gt;
Table 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; INSERT INTO ord VALUES (100, 204, &amp;quot;31-AUG-92&amp;quot;, &amp;quot;10-SEP-92&amp;quot;, 11, 601100, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (101, 205, &amp;quot;31-AUG-92&amp;quot;, &amp;quot;15-SEP-92&amp;quot;, 14, 8056.6, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (102, 206, &amp;quot;01-SEP-92&amp;quot;, &amp;quot;08-SEP-92&amp;quot;, 15, 8335, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (103, 208, &amp;quot;02-SEP-92&amp;quot;, &amp;quot;22-SEP-92&amp;quot;, 15, 377, &amp;quot;CASH&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (104, 208, &amp;quot;03-SEP-92&amp;quot;, &amp;quot;23-SEP-92&amp;quot;, 15, 32430, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (105, 209, &amp;quot;04-SEP-92&amp;quot;, &amp;quot;18-SEP-92&amp;quot;, 11, 2722.24, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (106, 210, &amp;quot;07-SEP-92&amp;quot;, &amp;quot;15-SEP-92&amp;quot;, 12, 15634, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (107, 211, &amp;quot;07-SEP-92&amp;quot;, &amp;quot;21-SEP-92&amp;quot;, 15, 142171, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (108, 212, &amp;quot;07-SEP-92&amp;quot;, &amp;quot;10-SEP-92&amp;quot;, 13, 149570, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (109, 213, &amp;quot;08-SEP-92&amp;quot;, &amp;quot;28-SEP-92&amp;quot;, 11, 1020935, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (110, 214, &amp;quot;09-SEP-92&amp;quot;, &amp;quot;21-SEP-92&amp;quot;, 11, 1539.13, &amp;quot;CASH&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (111, 204, &amp;quot;09-SEP-92&amp;quot;, &amp;quot;21-SEP-92&amp;quot;, 11, 2770, &amp;quot;CASH&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ord VALUES (112, 210, &amp;quot;31-AUG-92&amp;quot;, &amp;quot;10-SEP-92&amp;quot;, 12, 550, &amp;quot;CREDIT&amp;quot;, &amp;quot;Y&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE order_process(p_ordering_num NUMBER) IS&lt;br /&gt;
  2     CURSOR cur_get_order (p_ord_num ord.order_id%TYPE) IS&lt;br /&gt;
  3        SELECT *&lt;br /&gt;
  4        FROM   ord&lt;br /&gt;
  5        WHERE  order_id = p_ord_num;&lt;br /&gt;
  6     lv_order_rec cur_get_order%ROWTYPE;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8     OPEN cur_get_order (p_ordering_num);&lt;br /&gt;
  9     FETCH cur_get_order INTO lv_order_rec;&lt;br /&gt;
 10     DBMS_OUTPUT.PUT_LINE(&amp;quot;Order Total: &amp;quot; ||&lt;br /&gt;
 11        TO_CHAR(lv_order_rec.total));&lt;br /&gt;
 12     CLOSE cur_get_order;&lt;br /&gt;
 13     EXCEPTION&lt;br /&gt;
 14        WHEN OTHERS THEN&lt;br /&gt;
 15           RAISE_APPLICATION_ERROR(-20100, &amp;quot;Order Problem.&amp;quot;, FALSE);&lt;br /&gt;
 16  END;&lt;br /&gt;
 17  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; show error&lt;br /&gt;
No errors.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table ord;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>