简体   繁体   中英

Upper case in HSQL

Is there any way we can create default, value in UPPER case for an element in create table for 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.

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

For HSQLDB, the solution with generated column (similar to the MySQL solution) is:

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:

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")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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