sqlserver和oracle创建函数写法的对比

先贴两段代码
函数:给定一个日期,判断是否是休息日.
sqlserver

create function [user].[test]
(
		@date_in datetime
)
returns integer
as
begin
declare		@num int,
			@workflag varchar(1)
    select @num = count(*) from sys_holiday
     where datediff(dd, today, @date_in) = 0

    if (@num > 0) 
        select @workflag = workflag  from sys_holiday
         where datediff(dd, today, @date_in) = 0
        if (@workflag='w') then
            return 0
        else
            return 1
    else
        select @num = datepart(dw,@date_in)
        if (@num = 7 or @num = 1) 
            return 1
        else
            return 0
end

oracle

create or replace function test(date_in in date)
    return int
is
    num int;
    workflag varchar2(1);
begin
    select count(*) into num from Sys_Holiday
        where to_char(TODAY,'yyyy-MM-dd')=to_char(date_in,'yyyy-MM-dd');

    if (num>0) then
        select WORKFLAG into workflag from Sys_Holiday
            where to_char(TODAY,'yyyy-MM-dd')=to_char(date_in,'yyyy-MM-dd');
        if (workflag='W') then
            return 0;
        else
            return 1;
        end if;
    else
        select to_char(date_in,'D') into num from dual;
        if (num=7 or num=1) then
            return 1;
        else
            return 0;
        end if;
    end if;
end;

可以看出,两者在写法上还是存在不少区别的。
区别一:sqlserver只能写create而oracle可以写create or replace
区别二:sqlserver的传入参数和变量名都加@
区别三:sqlserver函数名加[]
区别四:一些变量类型不同,比如sqlserver的datetime
区别五:关键字不同,returns
区别六:语法不同,oracle的If else语句结尾要写end if
区别七:基本函数不同,比如sqlserver的datepart对应oracle的to_char(sysdate,‘D’),sqlserver的datediff和oracle的months_between
区别八:sqlserver中写 select @variable=column,oracle是select column into variable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值