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