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 test (
p1 in out number,p2 in number,r1 out number,r2 out number) as
begin
r1 := p1 + p2;
r2 := p1 - p2;
p1 := 888;
end test;
(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
test(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了。