【问题标题】:Open Office Base: How to Create a INSERT TriggerOpen Office Base:如何创建 INSERT 触发器
【发布时间】:2023-03-20 05:19:01
【问题描述】:

我正在使用 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)。谢谢

【问题讨论】:

  • 我认为你错过了for each row...查看下面的答案

标签: sql openoffice.org openoffice-base


【解决方案1】:

检查HSQLDB documentation,我认为你的语法应该是:

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

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

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

【讨论】:

  • 我知道空格是不好的形式。我对 sql 一无所知,并且使用包含它的代码完成了我的教程,因为它使表单变得既漂亮又简单。当我今晚再次开始时,我会尝试并报告。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多