从SQLSERVER向ORACLE8迁移的技术实现方案 PartIV [转]

 

<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);

 

转载于:https://www.cnblogs.com/yeskele/archive/2006/08/08/470728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值