有什么方法可以为HSQL的create table中的元素创建默认的大写值吗

CREATE TABLE IF NOT EXISTS  "job" (
   "id" INTEGER IDENTITY,
   "jobId" BIGINT ,
   "jobName" VARCHAR(100)  ,
   PRIMARY KEY ("jobName")
);

现在我需要的是每次都将jobName存储为大写。

最佳答案

对于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")
);

有一个更好的解决方案是使用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")

关于mysql - HSQL中的大写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50824078/

10-10 11:44