<?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%2FStored_Procedure_Function%2FParameter_OUT</id>
		<title>Oracle PL/SQL/Stored Procedure Function/Parameter OUT - История изменений</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%2FStored_Procedure_Function%2FParameter_OUT"/>
		<link rel="alternate" type="text/html" href="http://www.sqle.ru/index.php?title=Oracle_PL/SQL/Stored_Procedure_Function/Parameter_OUT&amp;action=history"/>
		<updated>2026-05-24T21:42:27Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.sqle.ru/index.php?title=Oracle_PL/SQL/Stored_Procedure_Function/Parameter_OUT&amp;diff=2120&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/Stored_Procedure_Function/Parameter_OUT&amp;diff=2120&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/Stored_Procedure_Function/Parameter_OUT&amp;diff=2121&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/Stored_Procedure_Function/Parameter_OUT&amp;diff=2121&amp;oldid=prev"/>
				<updated>2010-05-26T10:01:01Z</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;==Behavior of OUT variables and raised 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;
   &lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE RaiseError (p_Raise IN BOOLEAN,pA OUT NUMBER) AS&lt;br /&gt;
  2   BEGIN&lt;br /&gt;
  3     pA := 7;&lt;br /&gt;
  4&lt;br /&gt;
  5     IF p_Raise THEN&lt;br /&gt;
  6       RAISE DUP_VAL_ON_INDEX;&lt;br /&gt;
  7     ELSE&lt;br /&gt;
  8       RETURN;&lt;br /&gt;
  9     END IF;&lt;br /&gt;
 10   END RaiseError;&lt;br /&gt;
 11   /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&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; &lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2     v_Num NUMBER := 1;&lt;br /&gt;
  3   BEGIN&lt;br /&gt;
  4     DBMS_OUTPUT.PUT_LINE(&amp;quot;Value before first call: &amp;quot; || v_Num);&lt;br /&gt;
  5     RaiseError(FALSE, v_Num);&lt;br /&gt;
  6     DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after successful call: &amp;quot; || v_Num);&lt;br /&gt;
  7     DBMS_OUTPUT.PUT_LINE(&amp;quot;&amp;quot;);&lt;br /&gt;
  8&lt;br /&gt;
  9     v_Num := 2;&lt;br /&gt;
 10     DBMS_OUTPUT.PUT_LINE(&amp;quot;Value before second call: &amp;quot; || v_Num);&lt;br /&gt;
 11     RaiseError(TRUE, v_Num);&lt;br /&gt;
 12   EXCEPTION&lt;br /&gt;
 13     WHEN OTHERS THEN&lt;br /&gt;
 14        DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after unsuccessful call: &amp;quot; || v_Num);&lt;br /&gt;
 15   END;&lt;br /&gt;
 16   /&lt;br /&gt;
Value before first call: 1&lt;br /&gt;
Value after successful call: 7&lt;br /&gt;
Value before second call: 2&lt;br /&gt;
Value after unsuccessful call: 2&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==behavior of unhandled exceptions and OUT variables.==&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 PROCEDURE RaiseError (&lt;br /&gt;
  2    p_Raise IN BOOLEAN,&lt;br /&gt;
  3    p_ParameterA OUT NUMBER) AS&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    p_ParameterA := 7;&lt;br /&gt;
  6&lt;br /&gt;
  7    IF p_Raise THEN&lt;br /&gt;
  8      RAISE DUP_VAL_ON_INDEX;&lt;br /&gt;
  9    ELSE&lt;br /&gt;
 10      RETURN;&lt;br /&gt;
 11    END IF;&lt;br /&gt;
 12  END RaiseError;&lt;br /&gt;
 13  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_TempVar NUMBER := 1;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    DBMS_OUTPUT.PUT_LINE(&amp;quot;Initial value: &amp;quot; || v_TempVar);&lt;br /&gt;
  5    RaiseError(FALSE, v_TempVar);&lt;br /&gt;
  6    DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after successful call: &amp;quot; ||&lt;br /&gt;
  7                         v_TempVar);&lt;br /&gt;
  8&lt;br /&gt;
  9    v_TempVar := 2;&lt;br /&gt;
 10    DBMS_OUTPUT.PUT_LINE(&amp;quot;Value before 2nd call: &amp;quot; || v_TempVar);&lt;br /&gt;
 11    RaiseError(TRUE, v_TempVar);&lt;br /&gt;
 12  EXCEPTION&lt;br /&gt;
 13    WHEN OTHERS THEN&lt;br /&gt;
 14      DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after unsuccessful call: &amp;quot; ||&lt;br /&gt;
 15                           v_TempVar);&lt;br /&gt;
 16  END;&lt;br /&gt;
 17  /&lt;br /&gt;
Initial value: 1&lt;br /&gt;
Value after successful call: 7&lt;br /&gt;
Value before 2nd call: 2&lt;br /&gt;
Value after unsuccessful call: 2&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Define &amp;quot;out&amp;quot; parameters==&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&lt;br /&gt;
  2  procedure swap( p_parm1 in out number, p_parm2 in out number ) as&lt;br /&gt;
  3  --&lt;br /&gt;
  4    l_temp number;&lt;br /&gt;
  5  begin&lt;br /&gt;
  6    l_temp := p_parm1;&lt;br /&gt;
  7    p_parm1 := p_parm2;&lt;br /&gt;
  8    p_parm2 := l_temp;&lt;br /&gt;
  9  end swap;&lt;br /&gt;
 10  /&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Out parameter is assignable==&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;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE myTable3 (&lt;br /&gt;
  2      a INTEGER,&lt;br /&gt;
  3      b INTEGER&lt;br /&gt;
  4  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE or replace PROCEDURE addtuple3(a NUMBER, b OUT NUMBER)&lt;br /&gt;
  2  AS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4      b := 4;&lt;br /&gt;
  5      INSERT INTO myTable3 VALUES(a, b);&lt;br /&gt;
  6  END;&lt;br /&gt;
  7  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2      v NUMBER;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4      addtuple3(10, v);&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTable3;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Out with NOCOPY modifier.==&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;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE RaiseError (&lt;br /&gt;
  2    p_Raise IN BOOLEAN,&lt;br /&gt;
  3    p_ParameterA OUT NOCOPY NUMBER) AS&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    p_ParameterA := 7;&lt;br /&gt;
  6    IF p_Raise THEN&lt;br /&gt;
  7      RAISE DUP_VAL_ON_INDEX;&lt;br /&gt;
  8    ELSE&lt;br /&gt;
  9      RETURN;&lt;br /&gt;
 10    END IF;&lt;br /&gt;
 11  END RaiseError;&lt;br /&gt;
 12  /&lt;br /&gt;
Procedure created.&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_TempVar NUMBER := 1;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    DBMS_OUTPUT.PUT_LINE(&amp;quot;Initial value: &amp;quot; || v_TempVar);&lt;br /&gt;
  5    RaiseError(FALSE, v_TempVar);&lt;br /&gt;
  6    DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after successful call: &amp;quot; ||&lt;br /&gt;
  7                         v_TempVar);&lt;br /&gt;
  8&lt;br /&gt;
  9    v_TempVar := 2;&lt;br /&gt;
 10    DBMS_OUTPUT.PUT_LINE(&amp;quot;Value before 2nd call: &amp;quot; || v_TempVar);&lt;br /&gt;
 11    RaiseError(TRUE, v_TempVar);&lt;br /&gt;
 12  EXCEPTION&lt;br /&gt;
 13    WHEN OTHERS THEN&lt;br /&gt;
 14      DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after unsuccessful call: &amp;quot; ||&lt;br /&gt;
 15                           v_TempVar);&lt;br /&gt;
 16  END;&lt;br /&gt;
 17  /&lt;br /&gt;
Initial value: 1&lt;br /&gt;
Value after successful call: 7&lt;br /&gt;
Value before 2nd call: 2&lt;br /&gt;
Value after unsuccessful call: 7&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Parameter Modes==&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; CREATE OR REPLACE PROCEDURE ModeTest (&lt;br /&gt;
  2    p_InParameter    IN NUMBER,&lt;br /&gt;
  3    p_OutParameter   OUT NUMBER,&lt;br /&gt;
  4    p_InOutParameter IN OUT NUMBER) IS&lt;br /&gt;
  5&lt;br /&gt;
  6    v_LocalVariable  NUMBER;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    v_LocalVariable := p_InParameter;  -- Legal&lt;br /&gt;
  9&lt;br /&gt;
 10    p_OutParameter := 7;  -- Legal&lt;br /&gt;
 11&lt;br /&gt;
 12    v_LocalVariable := p_InOutParameter;  -- Legal&lt;br /&gt;
 13&lt;br /&gt;
 14    p_InOutParameter := 7;  -- Legal&lt;br /&gt;
 15  END ModeTest;&lt;br /&gt;
 16  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&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 procedure takes a single OUT. Out parameter is assignable==&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; CREATE OR REPLACE PROCEDURE ModeOut (p_Out OUT NUMBER) AS&lt;br /&gt;
  2     v_LocalVariable NUMBER := 0;&lt;br /&gt;
  3   BEGIN&lt;br /&gt;
  4     IF (p_Out IS NULL) THEN&lt;br /&gt;
  5       DBMS_OUTPUT.PUT_LINE(&amp;quot;p_Out is NULL&amp;quot;);&lt;br /&gt;
  6     ELSE&lt;br /&gt;
  7       DBMS_OUTPUT.PUT_LINE(&amp;quot;p_Out = &amp;quot; || p_Out);&lt;br /&gt;
  8     END IF;&lt;br /&gt;
  9&lt;br /&gt;
 10     p_Out := 7;&lt;br /&gt;
 11&lt;br /&gt;
 12     v_LocalVariable := p_Out;&lt;br /&gt;
 13&lt;br /&gt;
 14      DBMS_OUTPUT.PUT(&amp;quot;At end of ModeOut: &amp;quot;);&lt;br /&gt;
 15     IF (p_Out IS NULL) THEN&lt;br /&gt;
 16       DBMS_OUTPUT.PUT_LINE(&amp;quot;p_Out is NULL&amp;quot;);&lt;br /&gt;
 17     ELSE&lt;br /&gt;
 18       DBMS_OUTPUT.PUT_LINE(&amp;quot;p_Out = &amp;quot; || p_Out);&lt;br /&gt;
 19     END IF;&lt;br /&gt;
 20   END ModeOut;&lt;br /&gt;
 21   /&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; show errors&lt;br /&gt;
No errors.&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 NUMBER := 1;&lt;br /&gt;
  3   BEGIN&lt;br /&gt;
  4     &lt;br /&gt;
  5     DBMS_OUTPUT.PUT_LINE(&amp;quot;Before calling ModeOut, v_Out = &amp;quot; || v_Out);&lt;br /&gt;
  6     ModeOut(v_Out);&lt;br /&gt;
  7     DBMS_OUTPUT.PUT_LINE(&amp;quot;After calling ModeOut, v_Out = &amp;quot; || v_Out);&lt;br /&gt;
  8   END;&lt;br /&gt;
  9   /&lt;br /&gt;
Before calling ModeOut, v_Out = 1&lt;br /&gt;
p_Out is NULL&lt;br /&gt;
At end of ModeOut: p_Out = 7&lt;br /&gt;
After calling ModeOut, v_Out = 7&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;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unhandled exceptions and OUT variables==&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 PROCEDURE RaiseError (&lt;br /&gt;
  2    p_Raise IN BOOLEAN,&lt;br /&gt;
  3    p_ParameterA OUT NUMBER) AS&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    p_ParameterA := 7;&lt;br /&gt;
  6&lt;br /&gt;
  7    IF p_Raise THEN&lt;br /&gt;
  8      RAISE DUP_VAL_ON_INDEX;&lt;br /&gt;
  9    ELSE&lt;br /&gt;
 10      RETURN;&lt;br /&gt;
 11    END IF;&lt;br /&gt;
 12  END RaiseError;&lt;br /&gt;
 13  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2    v_TempVar NUMBER := 1;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    DBMS_OUTPUT.PUT_LINE(&amp;quot;Initial value: &amp;quot; || v_TempVar);&lt;br /&gt;
  5    RaiseError(FALSE, v_TempVar);&lt;br /&gt;
  6    DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after successful call: &amp;quot; || v_TempVar);&lt;br /&gt;
  7&lt;br /&gt;
  8    v_TempVar := 2;&lt;br /&gt;
  9    DBMS_OUTPUT.PUT_LINE(&amp;quot;Value before 2nd call: &amp;quot; || v_TempVar);&lt;br /&gt;
 10    RaiseError(TRUE, v_TempVar);&lt;br /&gt;
 11  EXCEPTION&lt;br /&gt;
 12    WHEN OTHERS THEN&lt;br /&gt;
 13      DBMS_OUTPUT.PUT_LINE(&amp;quot;Value after unsuccessful call: &amp;quot; || v_TempVar);&lt;br /&gt;
 14  END;&lt;br /&gt;
 15  /&lt;br /&gt;
Initial value: 1&lt;br /&gt;
Value after successful call: 7&lt;br /&gt;
Value before 2nd call: 2&lt;br /&gt;
Value after unsuccessful call: 2&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use out parameter to get value out==&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; 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; 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; select * from emp;&lt;br /&gt;
     EMPNO Employee Name JOB              MGR HIREDATE      Salary       COMM     DEPTNO&lt;br /&gt;
---------- ------------- --------- ---------- --------- ---------- ---------- ----------&lt;br /&gt;
      7369 SMITH         CLERK           7902 17-DEC-80        800                    20&lt;br /&gt;
      7499 ALLEN         SALESMAN        7698 20-FEB-81       1600        300         30&lt;br /&gt;
      7521 WARD          SALESMAN        7698 22-FEB-81       1250        500         30&lt;br /&gt;
      7566 JONES         MANAGER         7839 02-APR-81       2975                    20&lt;br /&gt;
      7654 MARTIN        SALESMAN        7698 28-SEP-81       1250       1400         30&lt;br /&gt;
      7698 BLAKE         MANAGER         7839 01-MAY-81       2850                    30&lt;br /&gt;
      7782 CLARK         MANAGER         7839 09-JUN-81       2450                    10&lt;br /&gt;
      7788 SCOTT         ANALYST         7566 09-DEC-82       3000                    20&lt;br /&gt;
      7839 KING          PRESIDENT            17-NOV-81       5000                    10&lt;br /&gt;
      7844 TURNER        SALESMAN        7698 08-SEP-81       1500          0         30&lt;br /&gt;
      7876 ADAMS         CLERK           7788 12-JAN-83       1100                    20&lt;br /&gt;
     EMPNO Employee Name JOB              MGR HIREDATE      Salary       COMM     DEPTNO&lt;br /&gt;
---------- ------------- --------- ---------- --------- ---------- ---------- ----------&lt;br /&gt;
      7900 JAMES         CLERK           7698 03-DEC-81        950                    30&lt;br /&gt;
      7902 FORD          ANALYST         7566 03-DEC-81       3000                    20&lt;br /&gt;
      7934 MILLER        CLERK           7782 23-JAN-82       1300                    10&lt;br /&gt;
14 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create or replace procedure emp_lookup(&lt;br /&gt;
  2    p_empno in     number,&lt;br /&gt;
  3    o_ename    out emp.ename%type,&lt;br /&gt;
  4    o_sal      out emp.sal%type ) as&lt;br /&gt;
  5  begin&lt;br /&gt;
  6    select ename, sal&lt;br /&gt;
  7      into o_ename, o_sal&lt;br /&gt;
  8      from emp&lt;br /&gt;
  9        where empno = p_empno;&lt;br /&gt;
 10  exception&lt;br /&gt;
 11    when NO_DATA_FOUND then&lt;br /&gt;
 12      o_ename := &amp;quot;NULL&amp;quot;;&lt;br /&gt;
 13      o_sal := -1;&lt;br /&gt;
 14    end emp_lookup;&lt;br /&gt;
 15  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; set serverout on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2   l_ename emp.ename%type;&lt;br /&gt;
  3   l_sal emp.sal%type;&lt;br /&gt;
  4  begin&lt;br /&gt;
  5   emp_lookup( 7782, l_ename, l_sal );&lt;br /&gt;
  6   dbms_output.put_line( &amp;quot;Ename = &amp;quot; || l_ename );&lt;br /&gt;
  7   dbms_output.put_line( &amp;quot;Sal = &amp;quot; || l_sal );&lt;br /&gt;
  8  end;&lt;br /&gt;
  9  /&lt;br /&gt;
Ename = CLARK&lt;br /&gt;
Sal = 2450&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.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using out parameter==&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 FUNCTION CallFunc(p1 IN VARCHAR2)&lt;br /&gt;
  2    RETURN VARCHAR2 AS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    DBMS_OUTPUT.PUT_LINE(&amp;quot;CallFunc called with &amp;quot; || p1);&lt;br /&gt;
  5    RETURN p1;&lt;br /&gt;
  6  END CallFunc;&lt;br /&gt;
  7  /&lt;br /&gt;
Function 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; DECLARE&lt;br /&gt;
  2    myResult VARCHAR2(50);&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    EXECUTE IMMEDIATE &amp;quot;CALL CallFunc(&amp;quot;&amp;quot;Hello from PL/SQL&amp;quot;&amp;quot;) INTO :myResult&amp;quot;&lt;br /&gt;
  5    USING OUT myResult;&lt;br /&gt;
  6  END;&lt;br /&gt;
  7  /&lt;br /&gt;
CallFunc called with Hello from PL/SQL&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;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Output Parameters==&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 emp (&lt;br /&gt;
  2     empID INT NOT NULL PRIMARY KEY,&lt;br /&gt;
  3     Name      VARCHAR(50) NOT NULL);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp (empID,Name) VALUES (1,&amp;quot;Tom&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp (empID,Name) VALUES (2,&amp;quot;Jack&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp (empID,Name) VALUES (3,&amp;quot;Mary&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp (empID,Name) VALUES (4,&amp;quot;Bill&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp (empID,Name) VALUES (5,&amp;quot;Cat&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO emp (empID,Name) VALUES (6,&amp;quot;Victor&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE PROCEDURE GetempName(i_empID IN INT,o_empName OUT VARCHAR)&lt;br /&gt;
  2  AS&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4     SELECT Name INTO o_empName FROM emp&lt;br /&gt;
  5     WHERE empID = i_empID;&lt;br /&gt;
  6  END;&lt;br /&gt;
  7  /&lt;br /&gt;
SP2-0804: Procedure created with compilation warnings&lt;br /&gt;
SQL&amp;gt; SET SERVEROUT ON&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2     empName VARCHAR(50);&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4     GetempName(3, empName);&lt;br /&gt;
  5     dbms_output.put_line(empName);&lt;br /&gt;
  6  END;&lt;br /&gt;
  7  /&lt;br /&gt;
Mary&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.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>