1

我正在使用 OpenOffice Base 和一些自制的 sql 创建一个数据库。尝试引用数字和可能字母的外键时会出现问题。我想强制我正在检查键的表强制插入为大写(或小写,我不挑剔)并对正在检查的表执行相同的操作。表格:

DROP TABLE IF EXISTS Gun;
DROP TABLE IF EXISTS Model;  
DROP TABLE IF EXISTS Value;

CREATE TABLE Model (
    "Model Name" VARCHAR (25) NOT NULL PRIMARY KEY,
    "Manufacuture" VARCHAR (15) NOT NULL,
    "Manufactured Start Year" INTEGER NOT NULL,
    "Manufactured End Year" INTEGER,
    "Gun Type" VARCHAR (10),
    "Value Mininum" DECIMAL (10, 2),
    "Value Maximum" DECIMAL (10, 2) NOT NULL,
    "Description" VARCHAR (500)
);

CREATE TABLE Gun (
    "Serial Number" VARCHAR (25) NOT NULL,
    "Model Name" VARCHAR (25),
    "Caliber" VARCHAR (10),
    "Unique Features" VARCHAR (200),
    "Manufactured Date" INTEGER,
    "Condition" INTEGER,
    CONSTRAINT FK_MODEL FOREIGN KEY ("Model Name") REFERENCES Model ("Model Name"),
    CONSTRAINT PK_GUN_KEY PRIMARY KEY ("Serial Number", "Model Name"),
    CONSTRAINT CK_CONDITION CHECK( "Condition" <= 100 )    
);

触发器(不起作用,是我尝试过的众多之一):

CREATE TRIGGER ForceUpper BEFORE INSERT ON Model
SET Model."Model Name" = UPPER(Model."Model Name");

这使:

Unexpected end of command: SET in statement

关于我做错了什么的任何提示都会很好。我查看的 HyperSQL 文档除了添加 BEGIN ATOMIC 之外没有什么帮助,它也有意外的命令结束(即使是 END)。谢谢

4

1 回答 1

0

检查HSQLDB 文档,我认为您的语法应该是:

create trigger ForceUpper before insert on Model
    for each row set new."Model Name" = UPPER(new."Model Name")

new关键字指的是正在插入的新行

注意:我建议您避免在表名和/或列名中使用空格。如果您需要分隔单词,请使用_而不是空格或使用CamelCase.

于 2014-08-11T20:58:05.247 回答