Oracle中的过程
Oracle中,子程序是已经命名的PL/SQL块,他们预编译后存储在数据库中,可以随时从任何数据库客户端和应用程序中调用它们。命名的PL/SQL程序包括过程和函数。程序可以通过过程名和函数名对他们进行调用,相当于Java中的方法,过程相当于就是没有返回值的方法。函数相当于有返回值的方法,过程和函数都可以有自身的参数,在调用时为其传值。下面的例子就是简述了如何使用过程:
过程的语法:
CREATE [OR REPLACE] PROCEDURE 过程名 [(过程参数列表)]
{IS|AS}
--声明部分
BEGIN
--可执行部分
[EXCEPTION]
--异常处理部分
END [过程名];
例如:创建的orcltest表,包含两个字段,name和age来测试:
如图:
第一个,不带参数的过程:
create or replace procedure displaytest
is
begin
insert into orcltest values('smith',23);
update orcltest set age=24 where name='Dom';
commit;
exception
when others then
dbms_output.put_line('其他异常');
end displaytest;
在command window 中,进行测试:
SQL> set serverout on
SQL> execute displaytest
PL/SQL procedure successfully completed --提示PL/SQL执行成功!
以下是执行成功后的截图:
好的编程习惯可以在编写程序过程中达到事半功倍的效果,在写PL/SQL的过程中,应该先写框架,及搭架子,再填内容。
下面是带参数的过程测试:
create or replace procedure displaytest(agetest number)
is
begin
insert into orcltest values('kity',45);
update orcltest set age=agetest where name='smith';
commit;
exception
when others then
dbms_output.put_line('其他异常');
end displaytest;
在command window 中,进行测试:
SQL> set serverout on
SQL> execute displaytest(67)
PL/SQL procedure successfully completed --测试成功
以下是测试成功后执行查询语句后的截图:
另外必须要说明的是:调用程序是通过参数向过程传值的,过程中的形参接收调用者传递过来的参数,并且在过程中可以使用。默认情况下,过程中的参数在过程中只能使用,不能对参数重新赋值。过程中参数传递共有三种模式:分别是IN、OUT和IN OUT。参数的具体语法是:
参数名称 [IN|OUT|IN OUT] 数据类型
其中,最常用的是IN,OUT。在什么都不写的时候,默认是IN。
并且在默认情况下(即IN):在PL/SQL中是不可以给参数赋值的。
如上例中,在IS段中是不能给agetest赋值的。
在参数中也可以给赋默认值,在参数定义同时用DEFAULT(或者赋值运算符)直接对参数进行初始化,即参数的默认值,当调用者没有对该参数传值时,过程中就使用参数默认值。一个过程中可以有若干个默认值参数,但是默认值参数只能放在参数列表的最后。
语法如下:
参数名称 [IN|OUT|IN OUT] 数据类型 DEFAULT XX
例如:
create or replace procedure displaytest(usename varchar,agetest number default 23)
is
begin
insert into orcltest values(usename,agetest);
update orcltest set age=agetest where name='smith';
commit;
exception
when others then
dbms_output.put_line('其他异常');
end displaytest;
这样写当调用时,只给名字赋值,则默认的年龄就是23岁。
SQL> execute displaytest('ssk')
PL/SQL procedure successfully completed
结果:
如果把参数写成这样:agetest number default 23,usename varchar 则在调用时,只能赋全值,是不能使用默认值的,不然会报错!
即:begin displaytest('ssk'); end;
ORA-06550: 第 2 行, 第 7 列:
PLS-00306: 调用 'DISPLAYTEST' 时参数个数或类型错误
ORA-06550: 第 2 行, 第 7 列:
PL/SQL: Statement ignored --是错误的,所以失败
这样正确:
SQL> execute displaytest(45,'ssk')
PL/SQL procedure successfully completed --成功
截图如下:
以上是对oracle数据库中子程序和程序包中过程的一些学习心得,希望对同样学习数据库的人有所帮助!