oracle 子过程 块,Oracle中子程序和程序包中的过程

Oracle中的过程

Oracle中,子程序是已经命名的PL/SQL块,他们预编译后存储在数据库中,可以随时从任何数据库客户端和应用程序中调用它们。命名的PL/SQL程序包括过程和函数。程序可以通过过程名和函数名对他们进行调用,相当于Java中的方法,过程相当于就是没有返回值的方法。函数相当于有返回值的方法,过程和函数都可以有自身的参数,在调用时为其传值。下面的例子就是简述了如何使用过程:

过程的语法:

CREATE [OR REPLACE] PROCEDURE 过程名 [(过程参数列表)]

{IS|AS}

--声明部分

BEGIN

--可执行部分

[EXCEPTION]

--异常处理部分

END [过程名];

例如:创建的orcltest表,包含两个字段,name和age来测试:

如图:

0818b9ca8b590ca3270a3433284dd417.png

第一个,不带参数的过程:

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执行成功!

以下是执行成功后的截图:

0818b9ca8b590ca3270a3433284dd417.png

好的编程习惯可以在编写程序过程中达到事半功倍的效果,在写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 --测试成功

以下是测试成功后执行查询语句后的截图:

0818b9ca8b590ca3270a3433284dd417.png

另外必须要说明的是:调用程序是通过参数向过程传值的,过程中的形参接收调用者传递过来的参数,并且在过程中可以使用。默认情况下,过程中的参数在过程中只能使用,不能对参数重新赋值。过程中参数传递共有三种模式:分别是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

结果:

0818b9ca8b590ca3270a3433284dd417.png

如果把参数写成这样: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 --成功

截图如下:

0818b9ca8b590ca3270a3433284dd417.png

以上是对oracle数据库中子程序和程序包中过程的一些学习心得,希望对同样学习数据库的人有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值