PL/SQL 存储过程入门小例子

版权声明: https://blog.csdn.net/dazengq/article/details/46470809

1.为什么要有存储过程?

过程是指用于执行特定操作的PL/SQL块。如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程。(类似C函数,Java方法

2.oracle的存储过程里的传递参数是怎么设定的?

当建立过程时,既可以指定过程参数,也可以不提供任何参数。当过程需要传递参数时,过程参数包括输入参数、输出参数和输入输出参数,其中输入参数(IN)用于接收调用环境的输入数 据,输出参数(OUT)用于将输出数据传递到调用环境,而输入输出参数(IN OUT)不仅要接收输入数据,而且还要输出数据到调用环境。(其中in,out,in out 就是用来表示参数传递的方式的,其中若参数后面没有这个标识符,则默认是in型的,也就是输入参数

3.建立存储过程的命令是什么,语法又是什么?

命令:create or replace procedure

语法:CREATE [OR REPLACE]PROCEDURE PROCEDURE_name
    (argument1 [mode1] datatype1,argument2 [mode2] datatype2, …)
IS [AS]
PL/SQLBlock;
如上所示,procedure_name 用于指定过程名,argument 用于指定过程参数,IS 或 AS用于开始PL/SQL块。(注意,当定义参数时,只能指定数据类型,不能指定数据长度;oracle的in(或者out,in out)是放在参数之后的,如:a number out)

4.怎么让建立好的过程接受输入的参数值?

方法1:直接在调用过程时,给参数写入值。如add(1,2);(假设已经写好了add(a number,b number)这个存储过程,用来计算a + b)

方法2:在PL/SQL调用存储过程时,在参数前加&符号,如add(&c,&d),PL/SQL会弹出输入c和d值的对话框(假设已经定义好c,d变量)

小例子:

建立一个,计算出a + b 和 a - b 的存储过程,名为test(在PL/SQL中实现)

(1) .在PL/SQL中的SQL Window输入框中输入:

create or replace procedure suibian_add(p1 in out number,p2 in number,r1 out number,r2 out number) as
begin  
  r1 := p1 + p2;
  r2 := p1 - p2; 
  p1 := 888;
end suibian_add;

(2) .点击 Execute(F8) . 如果没有错误,可以在PL/SQL左侧栏的 All objects 下的 Procedures 文件夹下看到你刚才建立好的存储过程

(3) .调用存储过程,继续输入如下代码:


declare 
  a number(3) := 100;
  b number(4) := 1000;
  c number(5) := 100; 
  d number(4) := 100;
begin
  suibian_add(a,b,c,d);   --在PL/SQL中可以<span style="color:#ff0000;"><strong>在语句块中</strong></span>直接引用,但在Sqlplus(或者commend中)需要call或者execute命令
  dbms_output.put_line('a + b = ' || c);
  dbms_output.put_line('a - b = ' || d);
  dbms_output.put_line('但a的值为:' || a || ', b的值为:' || b);
end;

(4) .选中上面这段代码,点击 Execute(F8),就可以在输出框里看到:

a + b = 1100
a - b = -900
但a的值为:888, b的值为:1000

总结:上面写的test存储过程里,p1为输入输出参数,p2为输入参数,r1及r2为输出参数。以该存储过程为主体理解,面对输入参数只取其值,面对输出参数只给其赋值,面对输入输出参数,先取其值,再给其赋值。如:a作为输入输出参数传递给p1,存储过程先取p1的值100,然后再将888赋值给p1,这样a的值就变为888了。





版权声明: https://blog.csdn.net/dazengq/article/details/46470809

猜你喜欢

转载自blog.csdn.net/vipp666/article/details/83056063