<?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_Tutorial%2FPL_SQL_Programming%2FUser_Defined_Exceptions</id>
		<title>Oracle PL/SQL Tutorial/PL SQL Programming/User Defined Exceptions - История изменений</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_Tutorial%2FPL_SQL_Programming%2FUser_Defined_Exceptions"/>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/PL_SQL_Programming/User_Defined_Exceptions&amp;action=history"/>
		<updated>2026-05-24T02:16:53Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/PL_SQL_Programming/User_Defined_Exceptions&amp;diff=4063&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_Tutorial/PL_SQL_Programming/User_Defined_Exceptions&amp;diff=4063&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://www.sqle.ru/index.php?title=Oracle_PL/SQL_Tutorial/PL_SQL_Programming/User_Defined_Exceptions&amp;diff=4064&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_Tutorial/PL_SQL_Programming/User_Defined_Exceptions&amp;diff=4064&amp;oldid=prev"/>
				<updated>2010-05-26T10:08:32Z</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;== Adding User-Defined Exceptions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Before raising a user-defined exception, you must first declare the exception.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The syntax is&amp;lt;/p&amp;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;
&amp;lt;exception_name&amp;gt; exception;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== A User-Defined Exception==&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 demo table&lt;br /&gt;
SQL&amp;gt; create table Employee(&lt;br /&gt;
  2    ID                 VARCHAR2(4 BYTE)         NOT NULL,&lt;br /&gt;
  3    First_Name         VARCHAR2(10 BYTE),&lt;br /&gt;
  4    Last_Name          VARCHAR2(10 BYTE),&lt;br /&gt;
  5    Start_Date         DATE,&lt;br /&gt;
  6    End_Date           DATE,&lt;br /&gt;
  7    Salary             Number(8,2),&lt;br /&gt;
  8    City               VARCHAR2(10 BYTE),&lt;br /&gt;
  9    Description        VARCHAR2(15 BYTE)&lt;br /&gt;
 10  )&lt;br /&gt;
 11  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- prepare data&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2               values (&amp;quot;01&amp;quot;,&amp;quot;Jason&amp;quot;,    &amp;quot;Martin&amp;quot;,  to_date(&amp;quot;19960725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20060725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1234.56, &amp;quot;Toronto&amp;quot;,  &amp;quot;Programmer&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;02&amp;quot;,&amp;quot;Alison&amp;quot;,   &amp;quot;Mathews&amp;quot;, to_date(&amp;quot;19760321&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19860221&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6661.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;03&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Smith&amp;quot;,   to_date(&amp;quot;19781212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19900315&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6544.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;04&amp;quot;,&amp;quot;Celia&amp;quot;,    &amp;quot;Rice&amp;quot;,    to_date(&amp;quot;19821024&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19990421&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2344.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;05&amp;quot;,&amp;quot;Robert&amp;quot;,   &amp;quot;Black&amp;quot;,   to_date(&amp;quot;19840115&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980808&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;06&amp;quot;,&amp;quot;Linda&amp;quot;,    &amp;quot;Green&amp;quot;,   to_date(&amp;quot;19870730&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19960104&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 4322.78,&amp;quot;New York&amp;quot;,  &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;07&amp;quot;,&amp;quot;David&amp;quot;,    &amp;quot;Larry&amp;quot;,   to_date(&amp;quot;19901231&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 7897.78,&amp;quot;New York&amp;quot;,  &amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;08&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Cat&amp;quot;,     to_date(&amp;quot;19960917&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20020415&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1232.78,&amp;quot;Vancouver&amp;quot;, &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&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; -- display data in the table&lt;br /&gt;
SQL&amp;gt; select * from Employee&lt;br /&gt;
  2  /&lt;br /&gt;
ID   FIRST_NAME           LAST_NAME            START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- -------------------- -------------------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason                Martin               25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer&lt;br /&gt;
02   Alison               Mathews              21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester&lt;br /&gt;
03   James                Smith                12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester&lt;br /&gt;
04   Celia                Rice                 24-OCT-82 21-APR-99    2344.78 Vancouver  Manager&lt;br /&gt;
05   Robert               Black                15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester&lt;br /&gt;
06   Linda                Green                30-JUL-87 04-JAN-96    4322.78 New York   Tester&lt;br /&gt;
07   David                Larry                31-DEC-90 12-FEB-98    7897.78 New York   Manager&lt;br /&gt;
08   James                Cat                  17-SEP-96 15-APR-02    1232.78 Vancouver  Tester&lt;br /&gt;
8 rows selected.&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 function f_ValidateSalary(i_empNo VARCHAR, i_new_Sal NUMBER)&lt;br /&gt;
  2   return VARCHAR2&lt;br /&gt;
  3  is&lt;br /&gt;
  4    v_current_Sal NUMBER;&lt;br /&gt;
  5    e_increaseTooLarge exception;&lt;br /&gt;
  6  begin&lt;br /&gt;
  7     select salary into v_current_Sal&lt;br /&gt;
  8     from employee&lt;br /&gt;
  9     where id=i_empNo;&lt;br /&gt;
 10&lt;br /&gt;
 11     if (i_new_Sal/v_current_Sal) * 100 &amp;gt; 300 then&lt;br /&gt;
 12       raise e_increaseTooLarge;&lt;br /&gt;
 13     end if;&lt;br /&gt;
 14&lt;br /&gt;
 15    return &amp;quot;Y&amp;quot;;&lt;br /&gt;
 16  exception&lt;br /&gt;
 17    when e_increaseTooLarge then&lt;br /&gt;
 18      DBMS_OUTPUT.put_line(&amp;quot;increaseTooLarge&amp;quot;);&lt;br /&gt;
 19      return &amp;quot;N&amp;quot;;&lt;br /&gt;
 20  end;&lt;br /&gt;
 21  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select f_ValidateSalary(&amp;quot;01&amp;quot;, 10000) from dual;&lt;br /&gt;
F_VALIDATESALARY(&amp;quot;01&amp;quot;,10000)&lt;br /&gt;
--------------------------------------------------------------------------&lt;br /&gt;
N&lt;br /&gt;
increaseTooLarge&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- clean the table&lt;br /&gt;
SQL&amp;gt; drop table Employee&lt;br /&gt;
  2  /&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Including error messages in user-defined exceptions==&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;&lt;br /&gt;
SQL&amp;gt; -- create demo table&lt;br /&gt;
SQL&amp;gt; create table Employee(&lt;br /&gt;
  2    ID                 VARCHAR2(4 BYTE)         NOT NULL,&lt;br /&gt;
  3    First_Name         VARCHAR2(10 BYTE),&lt;br /&gt;
  4    Last_Name          VARCHAR2(10 BYTE),&lt;br /&gt;
  5    Start_Date         DATE,&lt;br /&gt;
  6    End_Date           DATE,&lt;br /&gt;
  7    Salary             Number(8,2),&lt;br /&gt;
  8    City               VARCHAR2(10 BYTE),&lt;br /&gt;
  9    Description        VARCHAR2(15 BYTE)&lt;br /&gt;
 10  )&lt;br /&gt;
 11  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- prepare data&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2               values (&amp;quot;01&amp;quot;,&amp;quot;Jason&amp;quot;,    &amp;quot;Martin&amp;quot;,  to_date(&amp;quot;19960725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20060725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1234.56, &amp;quot;Toronto&amp;quot;,  &amp;quot;Programmer&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;02&amp;quot;,&amp;quot;Alison&amp;quot;,   &amp;quot;Mathews&amp;quot;, to_date(&amp;quot;19760321&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19860221&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6661.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;03&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Smith&amp;quot;,   to_date(&amp;quot;19781212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19900315&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 6544.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;04&amp;quot;,&amp;quot;Celia&amp;quot;,    &amp;quot;Rice&amp;quot;,    to_date(&amp;quot;19821024&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19990421&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2344.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;05&amp;quot;,&amp;quot;Robert&amp;quot;,   &amp;quot;Black&amp;quot;,   to_date(&amp;quot;19840115&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980808&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;06&amp;quot;,&amp;quot;Linda&amp;quot;,    &amp;quot;Green&amp;quot;,   to_date(&amp;quot;19870730&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19960104&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 4322.78,&amp;quot;New York&amp;quot;,  &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;07&amp;quot;,&amp;quot;David&amp;quot;,    &amp;quot;Larry&amp;quot;,   to_date(&amp;quot;19901231&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 7897.78,&amp;quot;New York&amp;quot;,  &amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;08&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Cat&amp;quot;,     to_date(&amp;quot;19960917&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20020415&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1232.78,&amp;quot;Vancouver&amp;quot;, &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&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; -- display data in the table&lt;br /&gt;
SQL&amp;gt; select * from Employee&lt;br /&gt;
  2  /&lt;br /&gt;
ID   FIRST_NAME           LAST_NAME            START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- -------------------- -------------------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason                Martin               25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer&lt;br /&gt;
02   Alison               Mathews              21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester&lt;br /&gt;
03   James                Smith                12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester&lt;br /&gt;
04   Celia                Rice                 24-OCT-82 21-APR-99    2344.78 Vancouver  Manager&lt;br /&gt;
05   Robert               Black                15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester&lt;br /&gt;
06   Linda                Green                30-JUL-87 04-JAN-96    4322.78 New York   Tester&lt;br /&gt;
07   David                Larry                31-DEC-90 12-FEB-98    7897.78 New York   Manager&lt;br /&gt;
08   James                Cat                  17-SEP-96 15-APR-02    1232.78 Vancouver  Tester&lt;br /&gt;
8 rows selected.&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 p_validateSalary(i_empNo VARCHAR, i_new_sal NUMBER)&lt;br /&gt;
  2  is&lt;br /&gt;
  3    v_current_sal Number(8,2);&lt;br /&gt;
  4    e_increaseTooLarge EXCEPTION;&lt;br /&gt;
  5    pragma exception_init (e_increaseTooLarge, -20999);&lt;br /&gt;
  6  begin&lt;br /&gt;
  7     select salary into v_current_sal&lt;br /&gt;
  8     from employee&lt;br /&gt;
  9     where id=i_empNo;&lt;br /&gt;
 10     if (i_new_sal/v_current_sal)*100&amp;gt;300&lt;br /&gt;
 11     then&lt;br /&gt;
 12        raise_application_error (-20999, &amp;quot;Cannot triple salary for employee #&amp;quot;||i_empNo);&lt;br /&gt;
 13     end if;&lt;br /&gt;
 14  exception&lt;br /&gt;
 15    when e_increaseTooLarge then&lt;br /&gt;
 16      DBMS_OUTPUT.put_line(&amp;quot;increaseTooLarge&amp;quot;);&lt;br /&gt;
 17      raise;&lt;br /&gt;
 18  end;&lt;br /&gt;
 19  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; call p_validateSalary(&amp;quot;01&amp;quot;, 10000);&lt;br /&gt;
increaseTooLarge&lt;br /&gt;
call p_validateSalary(&amp;quot;01&amp;quot;, 10000)&lt;br /&gt;
     *&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-20999: Cannot triple salary for employee #01&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.P_VALIDATESALARY&amp;quot;, line 17&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- clean the table&lt;br /&gt;
SQL&amp;gt; drop table Employee&lt;br /&gt;
  2  /&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Propagation of Exceptions between Program Units==&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 function f_makeAddress (i_address VARCHAR2,i_city VARCHAR2,i_state VARCHAR2,i_zip VARCHAR2)&lt;br /&gt;
  2  return VARCHAR2&lt;br /&gt;
  3  is&lt;br /&gt;
  4     e_badZip EXCEPTION;&lt;br /&gt;
  5     pragma EXCEPTION_init(e_badZip,-20998);&lt;br /&gt;
  6     v_out VARCHAR2(256);&lt;br /&gt;
  7  begin&lt;br /&gt;
  8     p_validateZip (i_zip);&lt;br /&gt;
  9     v_out:= i_address||&amp;quot;, &amp;quot;||i_city ||&amp;quot;, &amp;quot;||i_state ||&amp;quot;, &amp;quot;||i_zip;&lt;br /&gt;
 10     return v_out;&lt;br /&gt;
 11  exception&lt;br /&gt;
 12     when e_badZip then&lt;br /&gt;
 13       return i_zip || &amp;quot;: Invalid zip code.&amp;quot;;&lt;br /&gt;
 14  end;&lt;br /&gt;
 15  /&lt;br /&gt;
Function created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace procedure p_validateZip (i_zipCode VARCHAR2)&lt;br /&gt;
  2  is&lt;br /&gt;
  3     e_tooShort EXCEPTION;&lt;br /&gt;
  4     e_tooLong  EXCEPTION;&lt;br /&gt;
  5     e_badZip   EXCEPTION;&lt;br /&gt;
  6     pragma exception_init(e_badZip, -20998);&lt;br /&gt;
  7     v_tempZip NUMBER;&lt;br /&gt;
  8  Begin&lt;br /&gt;
  9     if length(i_zipCode)&amp;lt; 5 then&lt;br /&gt;
 10       Raise e_tooShort;&lt;br /&gt;
 11     elsif  length(i_zipCode)&amp;gt; 6 then&lt;br /&gt;
 12       Raise e_tooLong;&lt;br /&gt;
 13     end if;&lt;br /&gt;
 14&lt;br /&gt;
 15     v_tempZip := to_number(i_zipCode);&lt;br /&gt;
 16&lt;br /&gt;
 17  exception&lt;br /&gt;
 18     when e_tooLong then&lt;br /&gt;
 19        DBMS_OUTPUT.put_line(&amp;quot;long zip&amp;quot;);&lt;br /&gt;
 20        raise e_badZip;&lt;br /&gt;
 21     when e_tooShort then&lt;br /&gt;
 22        DBMS_OUTPUT.put_line(&amp;quot;short zip&amp;quot;);&lt;br /&gt;
 23        -- raise e_badZip SHOULD be here&lt;br /&gt;
 24     when value_error then&lt;br /&gt;
 25        DBMS_OUTPUT.put_line(&amp;quot;non-numeric zip&amp;quot;);&lt;br /&gt;
 26        raise; -- re-raising the same exception&lt;br /&gt;
 27  end;&lt;br /&gt;
 28  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt; --Scenario 1: No rule violations&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2      v_out VARCHAR2(2000);&lt;br /&gt;
  3  begin&lt;br /&gt;
  4     v_out:=f_makeAddress(&amp;quot;AA&amp;quot;,&amp;quot;City&amp;quot;,&amp;quot;CA&amp;quot;,&amp;quot;94061&amp;quot;);&lt;br /&gt;
  5     DBMS_OUTPUT.put_line(v_out);&lt;br /&gt;
  6  end;&lt;br /&gt;
  7  /&lt;br /&gt;
AA, City, CA, 94061&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; --Scenario 2: Short ZIP code&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2        v_out VARCHAR2(2000);&lt;br /&gt;
  3  begin&lt;br /&gt;
  4       v_out:=f_makeAddress(&amp;quot;A&amp;quot;,&amp;quot;City&amp;quot;, &amp;quot;CA&amp;quot;,&amp;quot;940&amp;quot;);&lt;br /&gt;
  5        DBMS_OUTPUT.put_line(v_out);&lt;br /&gt;
  6  end;&lt;br /&gt;
  7  /&lt;br /&gt;
short zip&lt;br /&gt;
A, City, CA, 940&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt; --Scenario 3: Non-numeric ZIP code&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2      v_out VARCHAR2(2000);&lt;br /&gt;
  3  begin&lt;br /&gt;
  4     v_out:=f_makeAddress(&amp;quot;A&amp;quot;,&amp;quot;City&amp;quot; , &amp;quot;CA&amp;quot;,&amp;quot;9406A&amp;quot;);&lt;br /&gt;
  5     DBMS_OUTPUT.put_line(v_out);&lt;br /&gt;
  6  end;&lt;br /&gt;
  7  /&lt;br /&gt;
non-numeric zip&lt;br /&gt;
declare&lt;br /&gt;
*&lt;br /&gt;
ERROR at line 1:&lt;br /&gt;
ORA-06502: PL/SQL: numeric or value error: character to number conversion error&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.P_VALIDATEZIP&amp;quot;, line 26&lt;br /&gt;
ORA-06512: at &amp;quot;sqle.F_MAKEADDRESS&amp;quot;, line 8&lt;br /&gt;
ORA-06512: at line 4&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt; -- Long ZIP code&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2      v_out VARCHAR2(2000);&lt;br /&gt;
  3  begin&lt;br /&gt;
  4      v_out:=f_makeAddress(&amp;quot;A&amp;quot;,&amp;quot;City&amp;quot;,&amp;quot;CA&amp;quot;,&amp;quot;940612345&amp;quot;);&lt;br /&gt;
  5      DBMS_OUTPUT.put_line(v_out);&lt;br /&gt;
  6  end;&lt;br /&gt;
  7  /&lt;br /&gt;
long zip&lt;br /&gt;
940612345: Invalid zip code.&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>