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

日期: 2008-09-11 作者:小乔 来源:TechTarget中国 英文

3、在存储过程中调用另外一个存储过程


1)Informix


Call pNoParam();


Call pNormalParam(1, ‘a’) returning v_Result;


2)Oracle


pNoParam;


pNormalParam(1, ‘a’, v_Result);


4、日期操作


1)当前时间


① Informix


define cur_dtime_var datetime year to second;


当前日期时间: let cur_dtime_var = current; — datetime


② Oracle


Currtime date;


Currtime := sysdate;


2)当前日期的增减


① Informix


let tmp_date = today + 3 UNITS day; — 当前时间加三天


let tmp_datetime = current + 1 UNITS second; — 当前时间加1秒种


② Oracle


Tmp_date := sysdate + 3; — 当前时间加三天


Tmp_date := sysdate + 1/24/3600; –当前时间加1秒种


3)日期转换成字符串


① Informix


let v_PeriodEndTime = year(v_date)||extend(v_date,month to month)


||extend(v_date,day to day) ||extend(v_date,hour to hour)


||extend(v_date,minute to minute)|| extend(v_date,second to second);


② Oracle


v_PeriodEndTime := to_char(v_date, ’yyyymmddhh24miss’);


4)字符串转换成日期


假设字符串的形式是yyyymmddhhmiss形式的


① Informix


— 直接转换成日期


let v_BeginDate = substr(v_BeginTime,1,4)||’-’||substr(v_BeginTime,5,2)


||’-’||substr(v_BeginTime,7,2)||’ ’||substr(v_BeginTime,9,2)


||’:’||substr(v_BeginTime,11,2)||’:’||substr(v_BeginTime,13,2);


— 这个月的第一天


let v_date = substr(v_BeginTime,1,4)||’-’


||substr(v_BeginTime,5,2)||’-1 00:00:00’;


— 这个星期的第一天


let v_date = substr(v_BeginTime,1,4)||’-’||substr(v_BeginTime,5,2)


||’-’||substr(v_BeginTime,7,2)||’ 00:00:00’;


let v_week = weekday(v_date);


let v_date = v_date – v_week UNITS day;


② Oracle


— 直接转换成日期


v_BeginDate := to_date(v_BeginTime, ’yyyymmddhh24miss’);


— 这个月的第一天


v_BeginDate := trunc(to_date(v_BeginTime, ’yyyymmddhh24miss’), ‘mm’);


— 这个星期的第一天


v_BeginDate := trunc(to_date(v_BeginTime, ’yyyymmddhh24miss’), ‘day’);


5)事务


在oracle中缺省情况下,一个事务的结束就是下一个事务的开始,所以对于一个事务来说,我们只要写commit;即可,不需要明确标出什么时候开始一个事务,而informix需要。


6)打印调试信息


7)Informix


–设置跟踪模式


set debug file to “trace_check”; — with append;


–说明“with append”表示以追加模式打开跟踪结果文件


trace ’开始执行存储过程’


trace ’v_date=’||v_date;


trace ‘存储过程执行完毕’


trace off;


执行完以后打开当前目录下的trace_check即可看到打印出来的信息。


8)Oracle


DBMS_OUTPUT.PUT_LINE(‘开始执行存储过程’);


DBMS_OUTPUT.PUT_LINE(’v_date=’||v_date);


DBMS_OUTPUT.PUT_LINE(‘存储过程执行完毕’);


先设置一下缓冲区的大小


set serveroutput on size 100000; — 如果不执行该语句,会看不到调试信息


执行完毕以后,打印出来的信息就会直接显示在界面上。


5、关于参数的说明


如果存储过程想返回一个参数,在informix中是通过返回值的形式实现的,而在oracle是通过输出参数或者输入输出参数实现的。


举例:


1)Informix:


create procedure p1() returning integer;


return 0;


end procedure;


2)oracle:


create or replace procedure p1(x out number)


as


begin


x := 0;


end p1;


6、赋值


1)informix


let v_1 = 100;


2)oracle


v_1 := 100;


7、if语句


1)informix


if (v_1 =100) then


elif (v_1=200) then


Else


end if;


2)oracle


if (v_1 =100) then


elsif (v_1=200) then


Else


end if;

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐