经验分享:Informix和Oracle存储过程的异同

2008-08-04 15:48:09 来源:赛迪网 作者:小乔 点击:
在工作过程中涉及到过有时要进行INFORMIX和ORACLE之间的移植,有时应用需要既支持INFORMIX数据库又要支持ORACLE数据库,如果应用程序涉及到存储过程的话



 
  在工作过程中涉及到过有时要进行INFORMIX和ORACLE之间的移植,有时应用需要既支持INFORMIX数据库又要支持ORACLE数据库,如果应用程序涉及到存储过程的话,就需要既熟悉INFORMIX存储过程的写法,又需要熟悉ORACLE存储过程的写法。笔者将在工作中总结的一些经验写出来与大家共享。

 

建立存储过程的语法:

 

一、Informix

 

create procedure proc_name( [....in_parameter_list])

 

returning out_para_list / out_result_set;

 

二、Oracle

 

create [or replace] procedure procedue_name

 

[ (arg1 [ {in | out | in out }] type

 

(argn [ {in | out | in out }] type,)]

 

{is | as} --代替DECLARE关键字

 

[ 变量定义区]

 

begin

 

end procedure_name;

 

三、几个简单的例子

 

1、没有参数也没有返回值

 

1)Informix

 

create procedure pNoParam()

 

begin

 

on exception

 

rollback work;

 

return;

 

end exception

 

begin work;

 

delete from t1;

 

delete from t2;

 

commit work;

 

end;

 

end procedure;

 

2)Oracle

 

create or replace procedure pNoParam

 

as

 

begin

 

delete from t1;

 

delete from t2;

 

commit;

 

exception

 

when others then

 

begin

 

rollback;

 

end;

 

end pNoParam;

 

2、有输入输出

 

往t1表中插入一条记录,返回值表示插入是否成功。

 

1)Informix

 

create procedure pNormalParam(f1 integer, f2 varchar(10))

returning integer;

 

begin

 

on exception

 

rollback work;

 

return -1;

 

end exception

begin work;

 

insert into t1 values(f1, f2);

 

commit work;

 

return 0;

 

2)Oracle

 

create or replace procedure pNormalParam(f1 number,

f2 varchar2, v_Result out number)

 

as

 

begin

 

insert into t1 values(f1,f2);

 

commit;

 

v_Result = 0;

 

return;

 

exception

 

when others then

 

begin

 

rollback;

 

v_Result := -1;

 

end;

 

end pNormalParam;

 

需要注意的是,在oracle存储过程中,参数是不能加上size的,比如f1,在t1表中该字段是number(10,0),而这里只能写number,而不能写number(10,0)。

 

3、返回记录集

 

1)Informix

 

create procedure pReturnSet() returning integer, varchar(10);

 

define i integer;

 

define j varchar(10);

 

foreach

 

select f1, f2 into i, j from t1

 

return i, j with resume;

 

end foreach;

 

end procedure;

 

2)Oracle

 

9 7 3 1 2 3 4 8 :



本类最新行业评测技巧教程学院
本类热点本日本周本月
本类推荐本日本周本月

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203