达梦虚拟列用法
虚拟列是一个表达式,基于表中的某一个列,在运行时计算,不存储在数据库中,不能更新虚拟列的值。
达梦虚拟列可以做为查询条件,但是当基列中有空值时,需要特殊处理一下。
比如,我创建一张表,其中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