Oracle 临时和永久存储过程

Oracle 临时和永久存储过程,oracle,plsql,Oracle,Plsql,我正在Oracle中创建存储过程,其中一个存储过程是永久创建的,另一个存储过程是临时创建的,并在达到其目的后消失。它是如何工作的请在何时使用以及如何创建时给出您的指导 --这不是在DB中创建的,只是临时创建并消失 DECLARE name varchar2(10); PROCEDURE printVal (name varchar2) IS BEGIN dbms_output.put_line ('name:' || name); END; BEGIN name := 'Joe

我正在Oracle中创建存储过程,其中一个存储过程是永久创建的,另一个存储过程是临时创建的,并在达到其目的后消失。它是如何工作的请在何时使用以及如何创建时给出您的指导

--这不是在DB中创建的,只是临时创建并消失

DECLARE   name varchar2(10);
PROCEDURE printVal (name varchar2) IS
BEGIN
   dbms_output.put_line ('name:' || name);
END;  
BEGIN
  name := 'Joe';
  printVal(name);
END;
/
--这是在DB中创建的,并且永久可用

create PROCEDURE printVal (name varchar2) IS
BEGIN
   dbms_output.put_line ('name:' || name);
END; 

显然有不同的语法-第一个是匿名块,第二个创建存储过程。预期的行为正是您所观察到的,并且在Oracle PL/SQL文档中有所涉及

显然有不同的语法-第一个是匿名块,第二个创建存储过程。预期的行为正是您所观察到的,并且在Oracle PL/SQL文档中有所涉及

要理解,请将sql分为两部分

存储过程:

存储过程存储在数据库中。 我们可以在创建后随时调用存储过程。 存储过程还支持输入输出参数。 匿名块:

这些是未命名的pl/sql块。 匿名块不存储在数据库中。 无法传递参数
要理解这一点,请将sql分为两部分

存储过程:

存储过程存储在数据库中。 我们可以在创建后随时调用存储过程。 存储过程还支持输入输出参数。 匿名块:

这些是未命名的pl/sql块。 匿名块不存储在数据库中。 无法传递参数
我认为您会感到困惑,因为第一个匿名块包含一个pl/sql,它定义了一个名称printVal。但是因为它存在于匿名块中,所以不会存储在数据库中。感谢您的回复和回答。我想您可能会感到困惑,因为第一个匿名块包含一个pl/sql,它定义了一个名称printVal。但是因为它存在于匿名块中,所以它不会存储在数据库中。感谢您的回复和回答。您所说的不能传递参数是什么意思?在我的第一个示例中,我们将值临时传递给SP create。无法传递参数-我的意思是,我们不能像在存储过程中定义的那样在匿名块中定义输入输出参数。示例中的过程没有存储,因此它不是存储过程。还值得一提的是,/字符仅在某些客户端工具中用于指示输入结束和要执行的指令,而不是PL/SQL语言的一部分?在我的第一个示例中,我们将值临时传递给SP create。无法传递参数-我的意思是,我们不能像在存储过程中定义的那样在匿名块中定义输入输出参数。示例中的过程没有存储,因此它不是存储过程。还值得一提的是,一些客户端工具只需要/字符来指示输入的结束和要执行的指令,而不是PL/SQL语言的一部分。
---------- Stored Procedure Start--------

DECLARE   name varchar2(10);
PROCEDURE printVal (name varchar2) IS
BEGIN
   dbms_output.put_line ('name:' || name);
END;  
--------- Stored Procedure End-----------

----------anonymous block Start----------
BEGIN
  name := 'Joe';
  printVal(name);
END;
/
----------anonymous block end ------------