decode函数_Oracle 自定义函数一对多的坑

今天闲来没事练习自定义函数,突然发现一个神奇的问题,大概情况如下,我想弄个自定义函数把emp表里 部门20改换成部门100,这就涉及到转换用decode函数了;

流程是先写出:

SELECT DECODE (deptno ,20,100) FROM emp ; 返回结果如图所示

5af304ab63016731983906cd79fb045e.png

开始编写函数,随便拿了个mgr做参数:

CREATE OR REPLACE FUNCTION f_k(fk_mgr VARCHAR2) RETURN NUMBER

IS

x NUMBER(10);

BEGIN

SELECT DECODE (deptno ,20,100) INTO x FROM emp WHERE mgr= fk_mgr;

RETURN x;

END;

然后t使用函数:

SELECT f_k(mgr ) FROM emp ;

03eb47761e50ff698b841eebedb222cc.png

然后就报错了,

一开始我不理解,后来发现

SELECT mgr , deptno FROM emp;

33daaf9e176165146b8205e91152bfae.png

一个mgr会返回多个行的数据相关,所以才会导致报错,所以用唯一对应值的主键做参数,就不会出现这样的情况,

CREATE OR REPLACE FUNCTION f_k(fk_empno NUMBER) RETURN NUMBER

IS

x NUMBER(10);

BEGIN

SELECT DECODE (deptno ,20,100) INTO x FROM emp WHERE empno= fk_empno;

RETURN x;

END;

用这个empno主键做参数来处理就完美解决了

SELECT f_k(empno ) FROM emp ;

一用就成功了

6fd97a8a49e844fb893549a93de83943.png

完美收官,以后自定义函数选用参数处理的时候一定要想好用什么做参数,否则容易掉坑。

其他需要分享指教的请留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值