oracle的case语句转换成函数

linkbin 2016-08-26 03:08:47
CASE
WHEN A.INAIM = 'O' AND A.SPECIALREASONCODE_T IS NULL THEN
A.BL
WHEN A.INAIM = 'O' AND A.SPECIALREASONCODE_T IS NOT NULL THEN
NVL(GET_EIRBILLNO(A.RECORDID), A.BL)
WHEN A.INAIM = 'I' THEN
GET_EIRBILLNO(A.RECORDID)
WHEN A.INAIM = 'D' THEN
NVL(GET_EIRBILLNO(A.RECORDID), GET_EIRBILLNO_S(A.RECORDID))
ELSE
A.BL
END

如上,我想把上面的语句做成一个函数,怎么改

CREATE OR REPLACE FUNCTION get_BOOKING_NBR()
...
...全文
362 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
linkbin 2016-08-26
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
-- 要加四个参数,感觉还不如这样写,看着舒服;

create function fn(INAIM               varchar2,
                   SPECIALREASONCODE_T varchar2,
                   RECORDID            varchar2,
                   BL                  varchar2) 
return varchar2 
as
    ret varchar2(200);
begin
    select CASE
               WHEN INAIM = 'O' AND SPECIALREASONCODE_T IS NULL THEN
                BL
               WHEN INAIM = 'O' AND SPECIALREASONCODE_T IS NOT NULL THEN
                NVL(GET_EIRBILLNO(RECORDID), BL)
               WHEN INAIM = 'I' THEN
                GET_EIRBILLNO(RECORDID)
               WHEN INAIM = 'D' THEN
                NVL(GET_EIRBILLNO(RECORDID), GET_EIRBILLNO_S(RECORDID))
               ELSE
                BL
           END
      into ret
      from dual;
    return ret;
end;
/
都是高手
ghx287524027 2016-08-26
  • 打赏
  • 举报
回复
CREATE OR REPLACE FUNCTION get_BOOKING_NBR() return varchar2
is
变量定义
begin
	select 字段 into 变量 from 表
	if 判断相关变量 then
		return 。。
	elsif 判断变量 then
		return 。。
		………………
	end if;
end;
卖水果的net 2016-08-26
  • 打赏
  • 举报
回复
-- 要加四个参数,感觉还不如这样写,看着舒服;

create function fn(INAIM               varchar2,
                   SPECIALREASONCODE_T varchar2,
                   RECORDID            varchar2,
                   BL                  varchar2) 
return varchar2 
as
    ret varchar2(200);
begin
    select CASE
               WHEN INAIM = 'O' AND SPECIALREASONCODE_T IS NULL THEN
                BL
               WHEN INAIM = 'O' AND SPECIALREASONCODE_T IS NOT NULL THEN
                NVL(GET_EIRBILLNO(RECORDID), BL)
               WHEN INAIM = 'I' THEN
                GET_EIRBILLNO(RECORDID)
               WHEN INAIM = 'D' THEN
                NVL(GET_EIRBILLNO(RECORDID), GET_EIRBILLNO_S(RECORDID))
               ELSE
                BL
           END
      into ret
      from dual;
    return ret;
end;
/

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧