DM/达梦数据库查询或更新某一列中多个字典码对应内容

准备工作(建表、插入数据)

1、建立表格:学生-学习科目表student_study
注意:科目kemu列内容是字典码,需要更换成对应内容。

CREATE TABLE "TEST"."STUDENT_STUDY"
(
"NAME" VARCHAR(255),
"KEMU" VARCHAR(255)) STORAGE(ON "MAIN", CLUSTERBTR) ;

COMMENT ON COLUMN "TEST"."STUDENT_STUDY"."NAME" IS '姓名';
COMMENT ON COLUMN "TEST"."STUDENT_STUDY"."KEMU" IS '科目,内容是字典码,以英文逗号分隔';

INSERT INTO TEST.STUDENT_STUDY VALUES('张三','@1,@2'),('李四','@1,@3'),('王五','@1,@2,@3');

在这里插入图片描述

2、建立表格:编号-学科对应表格xueke
注意:这张表是字典码编号和科目xueke的对应关系表。

CREATE TABLE "TEST"."XUEKE"
(
"BIANHAO" VARCHAR(255),
"XUEKE" VARCHAR(255)) STORAGE(ON "MAIN", CLUSTERBTR) ;

COMMENT ON COLUMN "TEST"."XUEKE"."BIANHAO" IS '字典码编号';
COMMENT ON COLUMN "TEST"."XUEKE"."XUEKE" IS '学科名称';

INSERT INTO TEST.XUEKE VALUES('@1','数学'),('@2','语文'),('@3','英语');

在这里插入图片描述

自定义存储函数

-- 所有函数及定义参考DM8_SQL语言使用手册、DM8_SQL程序设计(在DM安装目录/doc/下)
CREATE OR REPLACE FUNCTION get_code_meaning(codes IN VARCHAR(200)) RETURN VARCHAR(200)
AS
i INT DEFAULT 1;-- 或者 i INT := 1
max_i INT;
code VARCHAR(100);
meaning VARCHAR(100);
result_type VARCHAR(200);
BEGIN
	-- 去除前后多余的逗号,LEADING去除左边(或使用LTRIM()函数),TRAILING去除右边(或使用RTRIM()函数),BOTH去除两端(默认是BOTH)
	codes := TRIM(BOTH ',' FROM codes);
	-- 获取字符串内码值个数
	max_i := LENGTH(codes) - LENGTH(REPLACE(codes, ',', '')) + 1; 
	WHILE i<=max_i LOOP
		-- 取出每个元素,以','进行分割
		code := SUBSTRING_INDEX(SUBSTRING_INDEX(codes, ',', i), ',', -1); 
		-- 在这里查询代码表获取每个代码的含义,并赋值给meaning变量
		-- 此处根据WHERE条件查询的结果必须是一行记录,否则报错 ;多行记录需使用`TOP 1`或者`LIMIT 1`进行处理
        SELECT XUEKE INTO meaning FROM TEST.XUEKE WHERE BIANHAO = code;  
        IF result_type IS NOT NULL THEN
        	result_type := CONCAT_WS(',',result_type,meaning);
        ELSE
        	result_type := meaning;
        END IF;
        i := i+1;
	END LOOP;
	RETURN result_type;
END;

查询出多个字典码对应的内容

SELECT NAME,KEMU,get_code_meaning(KEMU) FROM TEST.STUDENT_STUDY;

在这里插入图片描述

替换多个字典码对应的内容

UPDATE TEST.STUDENT_STUDY SET KEMU=get_code_meaning(KEMU);

表里科目列字典项数据已经替换成对应内容:
在这里插入图片描述

参考SQL Server更新某一列中多个字典码对应内容(sql示例),该博主给出的是SQL Server的方法,因业务需求,本人自行更改为DM数据库的可行方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杼蛘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值