简体   繁体   English

HSQL中的大写

[英]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'

DBFiddle Demo DBFiddle演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM