<?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%2FPL_SQL%2FVariable_Scope</id>
		<title>Oracle PL/SQL/PL SQL/Variable Scope - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FPL_SQL%2FVariable_Scope"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Variable_Scope&amp;action=history"/>
		<updated>2026-04-05T17:58:00Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Variable_Scope&amp;diff=1935&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/PL_SQL/Variable_Scope&amp;diff=1935&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://sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Variable_Scope&amp;diff=1936&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/PL_SQL/Variable_Scope&amp;diff=1936&amp;oldid=prev"/>
				<updated>2010-05-26T09:59:39Z</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;==Identifiers defined in the declaration of the child block are only in scope and visible within the child block itself.==&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; declare&lt;br /&gt;
  2    l_parent_number number;&lt;br /&gt;
  3  begin&lt;br /&gt;
  4    -- l_parent_number is visible and in scope&lt;br /&gt;
  5    l_parent_number := 1;&lt;br /&gt;
  6&lt;br /&gt;
  7    declare&lt;br /&gt;
  8      l_child_number number := 2;&lt;br /&gt;
  9    begin&lt;br /&gt;
 10      -- l_child_number is visible and in scope&lt;br /&gt;
 11      dbms_output.put_line(&amp;quot;parent + child = &amp;quot; ||&lt;br /&gt;
 12                            to_char(l_parent_number + l_child_number));&lt;br /&gt;
 13    end;&lt;br /&gt;
 14&lt;br /&gt;
 15    -- l_child_number is now not visible nor in scope:&lt;br /&gt;
 16    l_child_number := 2;&lt;br /&gt;
 17  end;&lt;br /&gt;
 18  /&lt;br /&gt;
  l_child_number := 2;&lt;br /&gt;
  *&lt;br /&gt;
ERROR at line 16:&lt;br /&gt;
ORA-06550: line 16, column 3:&lt;br /&gt;
PLS-00201: identifier &amp;quot;L_CHILD_NUMBER&amp;quot; must be declared&lt;br /&gt;
ORA-06550: line 16, column 3:&lt;br /&gt;
PL/SQL: Statement ignored&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;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;
==if you try to reference a variable before you declare it because PL/SQL requires an identifier be declared before we use it in our code==&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; declare&lt;br /&gt;
  2    myNumber number := another_number;&lt;br /&gt;
  3    another_number number := 10;&lt;br /&gt;
  4  begin&lt;br /&gt;
  5    null;&lt;br /&gt;
  6  end;&lt;br /&gt;
  7  /&lt;br /&gt;
  myNumber number := another_number;&lt;br /&gt;
                     *&lt;br /&gt;
ERROR at line 2:&lt;br /&gt;
ORA-06550: line 2, column 22:&lt;br /&gt;
PLS-00320: the declaration of the type of this expression is incomplete or malformed&lt;br /&gt;
ORA-06550: line 2, column 12:&lt;br /&gt;
PL/SQL: Item ignored&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; declare&lt;br /&gt;
  2    another_number number := 10;&lt;br /&gt;
  3    myNumber number := another_number;&lt;br /&gt;
  4  begin&lt;br /&gt;
  5    null;&lt;br /&gt;
  6  end;&lt;br /&gt;
  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;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Illustrates the scope of various identifiers==&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; --Illustrates the scope of various identifiers.&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     a_name  VARCHAR2(30) := &amp;quot;A Name&amp;quot;;&lt;br /&gt;
  3&lt;br /&gt;
  4  PROCEDURE name_print IS&lt;br /&gt;
  5  BEGIN&lt;br /&gt;
  6     DBMS_OUTPUT.PUT_LINE(a_name);&lt;br /&gt;
  7  END;&lt;br /&gt;
  8&lt;br /&gt;
  9&lt;br /&gt;
 10  BEGIN&lt;br /&gt;
 11     DBMS_OUTPUT.PUT_LINE(a_name);&lt;br /&gt;
 12&lt;br /&gt;
 13     DECLARE&lt;br /&gt;
 14         b_name  VARCHAR2(30) := &amp;quot;a Name&amp;quot;;&lt;br /&gt;
 15     BEGIN&lt;br /&gt;
 16         DBMS_OUTPUT.PUT_LINE(&amp;quot;Inside nested block&amp;quot;);&lt;br /&gt;
 17        DBMS_OUTPUT.PUT_LINE(a_name);&lt;br /&gt;
 18        DBMS_OUTPUT.PUT_LINE(b_name);&lt;br /&gt;
 19        name_print;&lt;br /&gt;
 20     END;&lt;br /&gt;
 21&lt;br /&gt;
 22         DBMS_OUTPUT.PUT_LINE(&amp;quot;Back in the main block&amp;quot;);&lt;br /&gt;
 23         --But we cannot compile the following line because b_name&lt;br /&gt;
 24        --is not defined in this block.&lt;br /&gt;
 25        --DBMS_OUTPUT.PUT_LINE(b_name);&lt;br /&gt;
 26        name_print;&lt;br /&gt;
 27  END;&lt;br /&gt;
 28&lt;br /&gt;
 29&lt;br /&gt;
 30  /&lt;br /&gt;
A Name&lt;br /&gt;
Inside nested block&lt;br /&gt;
A Name&lt;br /&gt;
a Name&lt;br /&gt;
A Name&lt;br /&gt;
Back in the main block&lt;br /&gt;
A Name&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;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;
==Override your scope access to containing blocks by reusing an identifier in a nested block==&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; DECLARE&lt;br /&gt;
  2    current_block VARCHAR2(10) := &amp;quot;Outer&amp;quot;;&lt;br /&gt;
  3    outer_block   VARCHAR2(10) := &amp;quot;Outer&amp;quot;;&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5    dbms_output.put_line(&amp;quot;[current_block][&amp;quot;||current_block||&amp;quot;]&amp;quot;);&lt;br /&gt;
  6    DECLARE&lt;br /&gt;
  7&lt;br /&gt;
  8      current_block VARCHAR2(10) := &amp;quot;Inner&amp;quot;;&lt;br /&gt;
  9    BEGIN&lt;br /&gt;
 10      dbms_output.put_line(&amp;quot;[current_block][&amp;quot;||current_block||&amp;quot;]&amp;quot;);&lt;br /&gt;
 11      dbms_output.put_line(&amp;quot;[outer_block][&amp;quot;||outer_block||&amp;quot;]&amp;quot;);&lt;br /&gt;
 12    END;&lt;br /&gt;
 13    dbms_output.put_line(&amp;quot;[current_block][&amp;quot;||current_block||&amp;quot;]&amp;quot;);&lt;br /&gt;
 14  END;&lt;br /&gt;
 15  /&lt;br /&gt;
[current_block][Outer]&lt;br /&gt;
[current_block][Inner]&lt;br /&gt;
[outer_block][Outer]&lt;br /&gt;
[current_block][Outer]&lt;br /&gt;
PL/SQL procedure successfully completed.&lt;br /&gt;
SQL&amp;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;
==Reference Type in another block as well==&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 NameList AS&lt;br /&gt;
  2    VARRAY(20) OF VARCHAR2(30);&lt;br /&gt;
  3  /&lt;br /&gt;
Type 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    v_Names2 NameList;&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    NULL;&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;&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 type is local to this block==&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 OR REPLACE TYPE NameList AS&lt;br /&gt;
  2    VARRAY(20) OF VARCHAR2(30);&lt;br /&gt;
  3  /&lt;br /&gt;
Type created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; DECLARE&lt;br /&gt;
  2&lt;br /&gt;
  3    TYPE DateList IS VARRAY(10) OF DATE;&lt;br /&gt;
  4&lt;br /&gt;
  5    v_Dates DateList;&lt;br /&gt;
  6    v_Names NameList;&lt;br /&gt;
  7  BEGIN&lt;br /&gt;
  8    NULL;&lt;br /&gt;
  9  END;&lt;br /&gt;
 10  /&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;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variable scope in a PL/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;&lt;br /&gt;
SQL&amp;gt; declare                                -- begin first block&lt;br /&gt;
  2    l_text varchar2(20);&lt;br /&gt;
  3    begin&lt;br /&gt;
  4      l_text := &amp;quot;First Block&amp;quot;;&lt;br /&gt;
  5      dbms_output.put_line(l_text);&lt;br /&gt;
  6      declare                            -- begin second block&lt;br /&gt;
  7        l_more_text varchar2(20);&lt;br /&gt;
  8      begin&lt;br /&gt;
  9        l_more_text := &amp;quot;Second Block&amp;quot;;&lt;br /&gt;
 10        dbms_output.put_line(l_more_text);&lt;br /&gt;
 11      end;                               -- end second block&lt;br /&gt;
 12    end;                                 -- end first block&lt;br /&gt;
 13  /&lt;br /&gt;
First Block&lt;br /&gt;
Second Block&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;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variable scope in variable &amp;quot;declare&amp;quot; block==&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; -- variable scope&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;  declare&lt;br /&gt;
  2      l_number number := l_another_number;&lt;br /&gt;
  3      l_another_number number := 10;&lt;br /&gt;
  4    begin&lt;br /&gt;
  5      null;&lt;br /&gt;
  6    end;&lt;br /&gt;
  7    /&lt;br /&gt;
    l_number number := l_another_number;&lt;br /&gt;
                       *&lt;br /&gt;
ERROR at line 2:&lt;br /&gt;
ORA-06550: line 2, column 24:&lt;br /&gt;
PLS-00320: the declaration of the type of this expression is incomplete or malformed&lt;br /&gt;
ORA-06550: line 2, column 14:&lt;br /&gt;
PL/SQL: Item ignored&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;
==variable scope with nested block==&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;  declare&lt;br /&gt;
  2      l_parent_number number;&lt;br /&gt;
  3    begin&lt;br /&gt;
  4      &lt;br /&gt;
  5      l_parent_number := 1;&lt;br /&gt;
  6&lt;br /&gt;
  7      declare&lt;br /&gt;
  8        l_child_number number := 2;&lt;br /&gt;
  9      begin&lt;br /&gt;
 10        &lt;br /&gt;
 11        dbms_output.put_line(&amp;quot;parent + child = &amp;quot; ||&lt;br /&gt;
 12                              to_char(l_parent_number + l_child_number));&lt;br /&gt;
 13      end;&lt;br /&gt;
 14&lt;br /&gt;
 15      &lt;br /&gt;
 16      l_child_number := 2;&lt;br /&gt;
 17    end;&lt;br /&gt;
 18    /&lt;br /&gt;
    l_child_number := 2;&lt;br /&gt;
    *&lt;br /&gt;
ERROR at line 16:&lt;br /&gt;
ORA-06550: line 16, column 5:&lt;br /&gt;
PLS-00201: identifier &amp;quot;L_CHILD_NUMBER&amp;quot; must be declared&lt;br /&gt;
ORA-06550: line 16, column 5:&lt;br /&gt;
PL/SQL: Statement ignored&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>