在工作过程中涉及到过有时要进行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