oracle中多选下拉转中文
CREATE OR REPLACE
FUNCTION getSelectitemNameByIds(
p_ids IN VARCHAR2
) RETURN VARCHAR2
IS
v_selectitemid VARCHAR2(32);
v_result VARCHAR2(4000) := '';
v_temp_ids VARCHAR2(4000) := p_ids;
v_name VARCHAR2(100);
v_pos NUMBER;
BEGIN
IF v_temp_ids IS NULL THEN
RETURN '';
END IF;
-- 循环处理每个逗号分隔的ID
WHILE v_temp_ids IS NOT NULL LOOP
-- 找到下一个逗号位置
v_pos := INSTR(v_temp_ids, ',');
-- 提取当前ID(没有逗号的部分)
IF v_pos = 0 THEN
-- 最后一个ID
v_selectitemid := TRIM(v_temp_ids);
v_temp_ids := NULL;
ELSE
-- 提取逗号前的ID
v_selectitemid := TRIM(SUBSTR(v_temp_ids, 1, v_pos - 1));
-- 移除已处理的ID和逗号
v_temp_ids := SUBSTR(v_temp_ids, v_pos + 1);
END IF;
-- 跳过空ID
CONTINUE WHEN v_selectitemid IS NULL OR LENGTH(v_selectitemid) = 0;
-- 查询对应的名称
BEGIN
SELECT name INTO v_name
FROM selectitemv
WHERE id = v_selectitemid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_name := '[ID:' || v_selectitemid || '未找到]';
END;
-- 拼接结果
v_result := v_result || v_name || ',';
END LOOP;
-- 移除末尾逗号
IF LENGTH(v_result) > 0 THEN
v_result := RTRIM(v_result, ',');
END IF;
RETURN v_result;
EXCEPTION
WHEN OTHERS THEN
-- 记录错误信息(可选)
-- DBMS_OUTPUT.PUT_LINE('错误: ' || SQLERRM);
RETURN v_result || '[...处理中断]';
END getSelectitemNameByIds;