[英]Upper case in HSQL
Is there any way we can create default, value in UPPER case for an element in create table for HSQL 有什么方法可以为HSQL创建表中的元素以大写形式创建默认值
CREATE TABLE IF NOT EXISTS "job" (
"id" INTEGER IDENTITY,
"jobId" BIGINT ,
"jobName" VARCHAR(100) ,
PRIMARY KEY ("jobName")
);
Now my need is to store the jobName in Upper case every time. 现在,我需要每次将jobName都存储为大写。
You could use computed/generated column: 您可以使用计算/生成的列:
-- MySQL
CREATE TABLE job (
id INT AUTO_INCREMENT,
jobid INT ,
jobName VARCHAR(100) ,
jobNameU VARCHAR(100) GENERATED ALWAYS AS (UPPER(jobName)) STORED,
PRIMARY KEY (jobNameU),
KEY(id)
);
INSERT INTO job(id, jobid, jobName)
VALUES (1,2,'aaa');
INSERT INTO job( jobid, jobName)
VALUES (2,'aaA')
-- Duplicate entry 'AAA' for key 'PRIMARY'
For HSQLDB, the solution with generated column (similar to the MySQL solution) is: 对于HSQLDB,带有生成列的解决方案(类似于MySQL解决方案)为:
CREATE TABLE IF NOT EXISTS "job" (
"id" INTEGER IDENTITY,
"jobId" BIGINT ,
"jobName" VARCHAR(100) ,
"jobNameU" VARCHAR(100) GENERATED ALWAYS AS (UPPER("jobName")),
PRIMARY KEY ("jobNameU")
);
There is a better solution with a BEFORE INSERT trigger which works without the extra generated column: 有一个使用BEFORE INSERT触发器的更好的解决方案,该触发器无需额外生成的列即可工作:
CREATE TABLE IF NOT EXISTS "job" (
"id" INTEGER IDENTITY,
"jobId" BIGINT ,
"jobName" VARCHAR(100) ,
PRIMARY KEY ("jobName")
);
CREATE TRIGGER makeUpper BEFORE INSERT ON "job" REFERENCING NEW ROW AS NEW
FOR EACH ROW
SET NEW."jobName" = UPPER(NEW."jobName")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.