达梦虚拟列用法

虚拟列是一个表达式,基于表中的某一个列,在运行时计算,不存储在数据库中,不能更新虚拟列的值。

达梦虚拟列可以做为查询条件,但是当基列中有空值时,需要特殊处理一下。

比如,我创建一张表,其中pwd字段的基列是passwd,这时passwd中有空值。

建表语句和数据如下:

CREATE TABLE "xnl"
(
"id" INT IDENTITY(1, 1) NOT NULL,
"passwd" VARCHAR(50),
"pwd" VARCHAR(50) GENERATED ALWAYS AS (LOWER(MD5("passwd"))) VIRTUAL ,
"sex" CHAR(10),
CLUSTER PRIMARY KEY("id"));

insert into "SYSDBA"."xnl"("passwd", "sex") VALUES('123', 1);
insert into "SYSDBA"."xnl"("passwd", "sex") VALUES('abc', 1);
insert into "SYSDBA"."xnl"("sex") VALUES(1);
commit;

当执行如下sql语句时,不会报错:

select "id","passwd","sex" from "SYSDBA"."xnl";

当把虚拟列作为查询条件,或者查出的列中包含虚拟列时,会报错,sql如下:

select "id","passwd","sex","pwd" from "SYSDBA"."xnl" ;
select "id","passwd","sex" from "SYSDBA"."xnl" where "pwd"='0x900150983CD24FB0D6963F7D28E17F72';

报错信息如下:

 解决方法如下:

把虚拟列用ifnull参数处理一下即可。

select "id","passwd","sex","pwd" from "SYSDBA"."xnl" where "pwd"='202cb962ac59075b964b07152d234b70';

 

 

 

更多资讯请上达梦技术社区了解: https://eco.dameng.com

posted @ 2021-09-13 19:00  xiaowu222  阅读(632)  评论(0编辑  收藏  举报