<?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%2FStored_Procedure_Function%2FCall</id>
		<title>Oracle PL/SQL/Stored Procedure Function/Call - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FStored_Procedure_Function%2FCall"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Stored_Procedure_Function/Call&amp;action=history"/>
		<updated>2026-04-06T12:16:20Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Stored_Procedure_Function/Call&amp;diff=2122&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/Stored_Procedure_Function/Call&amp;diff=2122&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/Stored_Procedure_Function/Call&amp;diff=2123&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Stored_Procedure_Function/Call&amp;diff=2123&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;==CALL statement.==&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 CallProc2(p1 IN OUT VARCHAR2) AS&lt;br /&gt;
  2  BEGIN&lt;br /&gt;
  3    DBMS_OUTPUT.PUT_LINE(&amp;quot;CallProc2 called with &amp;quot; || p1);&lt;br /&gt;
  4    p1 := p1 || &amp;quot; returned!&amp;quot;;&lt;br /&gt;
  5  END CallProc2;&lt;br /&gt;
  6  /&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; CALL CallProc2(:v_Output);&lt;br /&gt;
CallProc2 called with Hello!&lt;br /&gt;
Call completed.&lt;br /&gt;
SQL&amp;gt; PRINT v_Output&lt;br /&gt;
V_OUTPUT&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
Hello! returned!&lt;br /&gt;
SQL&amp;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;
==demonstrates using DBMS_SQL to execute CALL statement.==&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 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; CREATE OR REPLACE PACKAGE DynamicCall AS&lt;br /&gt;
  2    PROCEDURE DoInsert(p_NumCol IN MyTable.num_col%TYPE,&lt;br /&gt;
  3                       p_CharCol IN MyTable.char_col%TYPE);&lt;br /&gt;
  4&lt;br /&gt;
  5    PROCEDURE Go;&lt;br /&gt;
  6  END DynamicCall;&lt;br /&gt;
  7  /&lt;br /&gt;
Package 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 PACKAGE BODY DynamicCall AS&lt;br /&gt;
  2    PROCEDURE DoInsert(p_NumCol IN MyTable.num_col%TYPE,&lt;br /&gt;
  3                       p_CharCol IN MyTable.char_col%TYPE) IS&lt;br /&gt;
  4    BEGIN&lt;br /&gt;
  5      INSERT INTO MyTable (num_col, char_col)&lt;br /&gt;
  6        VALUES (p_NumCol, p_CharCol);&lt;br /&gt;
  7    END DoInsert;&lt;br /&gt;
  8&lt;br /&gt;
  9    PROCEDURE Go IS&lt;br /&gt;
 10      v_CallStmt VARCHAR2(100);&lt;br /&gt;
 11      v_CursorID INTEGER;&lt;br /&gt;
 12      v_NumCol MyTable.num_col%TYPE;&lt;br /&gt;
 13      v_CharCol MyTable.char_col%TYPE;&lt;br /&gt;
 14      v_Dummy INTEGER;&lt;br /&gt;
 15    BEGIN&lt;br /&gt;
 16      -- Open the cursor&lt;br /&gt;
 17      v_CursorID := DBMS_SQL.OPEN_CURSOR;&lt;br /&gt;
 18&lt;br /&gt;
 19      v_CallStmt := &amp;quot;CALL DynamicCall.DoInsert(:num_col, :char_col)&amp;quot;;&lt;br /&gt;
 20      DBMS_SQL.PARSE(v_CursorID, v_CallStmt, DBMS_SQL.NATIVE);&lt;br /&gt;
 21&lt;br /&gt;
 22      v_NumCol := 123;&lt;br /&gt;
 23      v_CharCol := &amp;quot;I like CALL statements!&amp;quot;;&lt;br /&gt;
 24      DBMS_SQL.BIND_VARIABLE(v_CursorID, &amp;quot;:num_col&amp;quot;, v_NumCol);&lt;br /&gt;
 25      DBMS_SQL.BIND_VARIABLE(v_CursorID, &amp;quot;:char_col&amp;quot;, v_CharCol);&lt;br /&gt;
 26      v_Dummy := DBMS_SQL.EXECUTE(v_CursorID);&lt;br /&gt;
 27      DBMS_SQL.CLOSE_CURSOR(v_CursorID);&lt;br /&gt;
 28  EXCEPTION&lt;br /&gt;
 29    WHEN OTHERS THEN&lt;br /&gt;
 30      -- Close the cursor, then raise the error again.&lt;br /&gt;
 31      DBMS_SQL.CLOSE_CURSOR(v_CursorID);&lt;br /&gt;
 32      RAISE;&lt;br /&gt;
 33&lt;br /&gt;
 34    END Go;&lt;br /&gt;
 35  END DynamicCall;&lt;br /&gt;
 36  /&lt;br /&gt;
Package 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;&lt;br /&gt;
SQL&amp;gt; drop table mytable;&lt;br /&gt;
Table dropped.&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;
==EXECUTE IMMEDIATE dynamic statement and return value==&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; DECLARE&lt;br /&gt;
  2    myResult VARCHAR2(50);&lt;br /&gt;
  3  BEGIN&lt;br /&gt;
  4    EXECUTE IMMEDIATE&lt;br /&gt;
  5      &amp;quot;CALL CallFunc(&amp;quot;&amp;quot;Hello from PL/SQL&amp;quot;&amp;quot;) INTO :myResult&amp;quot;&lt;br /&gt;
  6      USING OUT myResult;&lt;br /&gt;
  7  END;&lt;br /&gt;
  8  /&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;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==illegal procedure call==&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 PROCEDURE CallProc1(p1 IN VARCHAR2 := NULL) AS&lt;br /&gt;
  2  BEGIN&lt;br /&gt;
  3    DBMS_OUTPUT.PUT_LINE(&amp;quot;CallProc1 called with &amp;quot; || p1);&lt;br /&gt;
  4  END CallProc1;&lt;br /&gt;
  5  /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;gt; BEGIN&lt;br /&gt;
  2    CALL CallProc1();&lt;br /&gt;
  3  END;&lt;br /&gt;
  4  /&lt;br /&gt;
  CALL CallProc1();&lt;br /&gt;
       *&lt;br /&gt;
ERROR at line 2:&lt;br /&gt;
ORA-06550: line 2, column 8:&lt;br /&gt;
PLS-00103: Encountered the symbol &amp;quot;CALLPROC1&amp;quot; when expecting one of the&lt;br /&gt;
following:&lt;br /&gt;
:= . ( @ % ;&lt;br /&gt;
The symbol &amp;quot;:=&amp;quot; was substituted for &amp;quot;CALLPROC1&amp;quot; to continue.&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 script demonstrates the use of the CALL statement.==&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 myProcedure(p1 IN VARCHAR2 := NULL) AS&lt;br /&gt;
  2   BEGIN&lt;br /&gt;
  3     DBMS_OUTPUT.PUT_LINE(&amp;quot;myProcedure called with &amp;quot; || p1);&lt;br /&gt;
  4   END myProcedure;&lt;br /&gt;
  5   /&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; CREATE OR REPLACE PROCEDURE myProcedure2(p1 IN OUT VARCHAR2) AS&lt;br /&gt;
  2   BEGIN&lt;br /&gt;
  3     DBMS_OUTPUT.PUT_LINE(&amp;quot;myProcedure2 called with &amp;quot; || p1);&lt;br /&gt;
  4     p1 := p1 || &amp;quot; returned!&amp;quot;;&lt;br /&gt;
  5   END myProcedure2;&lt;br /&gt;
  6   /&lt;br /&gt;
Procedure created.&lt;br /&gt;
SQL&amp;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;&lt;br /&gt;
SQL&amp;gt; set serveroutput on&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- Some valid calls direct from SQL.&lt;br /&gt;
SQL&amp;gt; CALL myProcedure(&amp;quot;Hello!&amp;quot;);&lt;br /&gt;
myProcedure called with Hello!&lt;br /&gt;
Call completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; Call completed.&lt;br /&gt;
  2&lt;br /&gt;
SQL&amp;gt; CALL myProcedure();&lt;br /&gt;
myProcedure called with&lt;br /&gt;
Call completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; Call completed.&lt;br /&gt;
  2&lt;br /&gt;
SQL&amp;gt; VARIABLE v_Output VARCHAR2(50);&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; Call completed.&lt;br /&gt;
  2&lt;br /&gt;
SQL&amp;gt; PRINT v_Output&lt;br /&gt;
V_OUTPUT&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CALL myProcedure2(:v_Output);&lt;br /&gt;
myProcedure2 called with&lt;br /&gt;
Call completed.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; Call completed.&lt;br /&gt;
  2&lt;br /&gt;
SQL&amp;gt; PRINT v_Output&lt;br /&gt;
V_OUTPUT&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
 returned!&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;
==Using call statement in a dynamic statement is legal==&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 CallProc1(p1 IN VARCHAR2 := NULL) AS&lt;br /&gt;
  2  BEGIN&lt;br /&gt;
  3    DBMS_OUTPUT.PUT_LINE(&amp;quot;CallProc1 called with &amp;quot; || p1);&lt;br /&gt;
  4  END CallProc1;&lt;br /&gt;
  5  /&lt;br /&gt;
Procedure created.&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 CallProc1(&amp;quot;&amp;quot;Hello from PL/SQL&amp;quot;&amp;quot;)&amp;quot;;&lt;br /&gt;
  5  END;&lt;br /&gt;
  6  /&lt;br /&gt;
CallProc1 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;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>