weixin_38647584 2022-12-05 15:36 采纳率: 69.2%
浏览 38

oracle数据库自定义函数问题

最近在写sql时候想写个函数调用配合sql使用,大概描述下需求有个字段,工号JOB_NUMBER ='10202804/10133066/10131810',数据库里是编号,所有想写个函数,将JOB_NUMBER 传递进去,然后返回 '张三/李四/王五',如果王五不存在则返回昵称拼接code '张三/李四/10131810',因为数据库函数这块不怎么用,所以不太会写,需要前辈的指点,数据库是oracle的
下面是我写的函数,但是报错肯定有问题,然后不会改了,希望会的前辈给我指点一下,先说下我的大体思路就是想循环传递进来的参数,有可能【一个:‘10202804’ 只有一个code]就不用循环了,返回张三】,【多个:'10202804/10133066/10131810'多个才循环,返回'张三/李四/王五'】,SELECT NICK_NAME AS nick_name_str from SYS_USER su where su.user_name = str是我查询用户表,查询用户昵称的sql

CREATE OR REPLACE FUNCTION split_query RETURN(piv_str varchar2, p_sep varchar2 := ',')
l_idx number:=0; -- 用于计算piv_str1中分隔符的位置
str varchar2(500); -- 根据分隔符截取的子字符串
piv_str_a varchar2(500) := piv_str; -- 将piv_str赋值给piv_str_a
nick_name_str VARCHAR2(500); --查询到的结果
ret_str varchar2(500); -- 返回的数据
BEGIN
-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1
IF instr(piv_str, p_sep, 1) = 0 THEN
IF piv_str = piv_str_a THEN
SELECT NICK_NAME AS nick_name_str from SYS_USER su where su.user_name = piv_str
ret_str := nick_name_str;
END IF;
ELSE
-- 循环按分隔符截取piv_str
LOOP
l_idx := instr(piv_str,p_sep);
-- 当piv_str中还有分隔符时
IF l_idx > 0 THEN
-- 截取第一个分隔符前的字段str
str:= substr(piv_str,1,l_idx-1);
SELECT NICK_NAME AS nick_name_str from SYS_USER su where su.user_name = str
ret_str = concat(ret_str, concat('/', nick_name_str))
-- 无论最后是否相等,都跳出循环
EXIT;
END IF;
END LOOP;
-- 结束循环
END IF;
-- 返回ret_str
RETURN ret_str;
END;

保存后提示错误原文

img

稍加翻译后的报错

img

我想要的结果是传递'10202804/10133066/10131810',和自定义分隔符‘/’,返回内容 '张三/李四/王五' ,如果其中一个没有的话就比如王五没有查询到就返回'张三/李四/10131810'

函数调用 split_query('10202804/10133066/10131810','/')

  • 写回答

2条回答 默认 最新

  • Check_Const 2022-12-06 00:07
    关注

    上传的代码貌似不太友好,还要别人帮你排版

    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日

悬赏问题

  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。