为了账号安全,请及时绑定邮箱和手机立即绑定

如下是oracle函数将查询的单个结果返回,不知道为什么结果没有数据?

如下是oracle函数将查询的单个结果返回,不知道为什么结果没有数据?

慕哥9229398 2022-04-14 15:11:35
CREATE OR REPLACE FUNCTION decodedim(str IN VARCHAR2, table_id IN NUMBER)RETURN VARCHAR2ISRET VARCHAR2(300);BEGINFOR code_name IN (select wm_concat(flag_name) INTO RET from(select flag_name from PU_META_PLAT.MD_META_DIM_CODE where dim_table_id = table_id and flag_code in (SELECTtrim(substr(',' || str || ',', instr(',' || str || ',', ',', 1, LEVEL)+1,instr(',' || str || ',', ',', 1, LEVEL + 1)-instr(',' || str || ',', ',', 1, LEVEL)-1))FROM dualCONNECT BY LEVEL <= (length(',' || str || ',')-length(replace(',' || str || ',', ',', '')))/1-1)))LOOPDBMS_OUTPUT.put_line(RET);RETURN RET;END LOOP;END;上面是函数建立的代码,下面是执行函数:select decodedim('1,2,3,4,5,6,7,8,25,26,27,28,29,32,33,34,35', 5376) from dual;不知道为什么结果没有数据,求大神帮忙看看?
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

  1. 你这个结构有问题,你这个循环不管几次,总是会在第一次就跳出去。return 应该是在loop结束之后。

  2. 去看看上面的查询能不能返回结果。

  3. 自己写的程序尽量有异常控制。方便调试。你这种简单的程序,调试一下就能看到问题在哪里了。


查看完整回答
反对 回复 2022-04-19
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

代码太长了,又没有注释,没法看啊。
请问您是在什么工具中执行的,如果是sqlplus,那么要先执行"set serveroutput on",如果是sql developer之类的图形化工具,一般不用额外作设置。
其次,可以在每一步操作之后加上这一步的结果输出语句,例如dbms_output.put_line(结果),方便查看和调试。
希望对您有帮助啦。

查看完整回答
反对 回复 2022-04-19
?
冉冉说

TA贡献1877条经验 获得超1个赞

你for循环中的语句能执行么?
我觉得如果直接执行语句没有问题,可以不用设置变量ret
直接取循环的内容就好了。
select wm_concat(flag_name) INTO RET ——》select wm_concat(flag_name) as tmp
DBMS_OUTPUT.put_line(RET); -----> DBMS_OUTPUT.put_line(code_name.tmp);
RETURN RET; ----->RETURN code_name.tmp;

查看完整回答
反对 回复 2022-04-19
  • 3 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信