<4>、从T-SQL向PL/SQL迁移方案
通过上述讨论,在从T-SQL向PL/SQL迁移时,在常用语法与函数方面要逐一细致比较
后再行调整,特别要注意常用函数怎么进行替换和主体控制结构怎么进行调整。
(1)将所有的GETDATE全部转换成为SYSDATE;
(2)将所有的selct @var = column from table where condition 改成
select column into var from table where condition;
将所有的selct @var1 = @var2 改成
var1 :=var2;
(3)将所有的convert全部转换成为 to_char 或 trunc
例一:
declare rq1 datetime,rq2 datetime
…
select je from sr where rq > = convert (char(10),rq1,111)
and rq < convert(char(10),rq2,111)
应改成:
date rq1;
date rq2;
select sr into je where rq > = trunc(rq1) and rq < trunc(rq2);
例二:
declare rq1 datetime,rq2 datetime
…
select je from sr where convert(char(10),rq,111) > = convert (char(10),rq1,111)
and rq < convert(char(10),rq2,111)
应改成:
date rq1;
date rq2;
select sr into je where trunc(rq)> = trunc(rq1) and trunc(rq) < trunc(rq2);
或:
date rq1;
date rq2;
select sr into je where to_char(rq,’yyyy/mm/dd’)> =to_char(rq1,’yyyy/mm/dd’) and to_char(rq,’yyyy/mm/dd’) < to_char(rq2,’yyyy/mm/dd’);
(3)PL/SQL不支付时间字段与规则字符串的直接比例
如在T-SQL中的
select @je = sr where rq > ‘2001.01.01’是可以的。
而在PL/SQL中
select sr into je where rq > ‘2001.01.01’;是行不通的,如果要实现比例,则应改成;
select sr into je where rq > to_date(‘2001.01.01’,’yyyy.mm.dd’);或
select sr into je where to_char(rq,’yyyy.mm.dd’) > ‘2001.01.01’;
(4)将T-SQL中的DATEDIFF全部改成TRUNC(D1-D2),MONTHS_BETWEEN
如select @ts = datediff(day,date1,date2),在PL/SQL中应改为:
ts = trunc(date2 – date1);
如select @ys = datediff(month,date1,date2),在PL/SQL中应改为:
ts = months_between(date1 – date2);
(5)DateAdd全部改为D+n 或Add_Months
如select date2 = dateadd(day,date1,3),在PL/SQL中应改为:
date2 :=date1 + 3;
如select date2 = dateadd(month,date1,6),在PL/SQL中应改为:
date2 :=add_months(date1 ,6);