我有一个包含两个表的数据库。表ITEMS中的ON INSERT触发器应该将ITEMS.ITEMSIZE的值添加到STATS.SIZE
下面的选择语句是问题所在。如何修改此选项只能获取当前行更新的ITEMSIZE。 BTW STATS表只有一行。
** Tables **
CREATE TABLE ITEMS (
ID ID NOT NULL /* ID = VARCHAR(36) NOT NULL */,
EXPIRYTIME EXPIRYTIME NOT NULL /* EXPIRYTIME = BIGINT NOT NULL */,
ITEMSIZE ITEMSIZE /* ITEMSIZE = BIGINT NOT NULL */,
ACCESSCOUNT ACCESSCOUNT DEFAULT 1 NOT NULL /* ACCESSCOUNT = INTEGER DEFAULT 1 NOT NULL */,
LASTACCESSTIME LASTACCESSTIME /* LASTACCESSTIME = TIMESTAMP NOT NULL */
);
CREATE TABLE STATS (
INSTANCE SMALLINT,
SIZE BIGINT DEFAULT 0,
DISKCACHEITEMCOUNT BIGINT DEFAULT 0,
DISKCACHEHITS BIGINT DEFAULT 0,
DISKCACHEMISSES BIGINT DEFAULT 0
);
**触发**
AS
DECLARE ITEM_SIZE bigint;
begin
SELECT ITEMSIZE FROM ITEMS INTO :ITEM_SIZE;
UPDATE STATS SET SIZE = SIZE + :ITEM_SIZE WHERE INSTANCE = '0';
end
答案 0 :(得分:1)
用户“mu太短”给了你正确的提示 - 你想在触发器中使用NEW / OLD上下文变量来读取“当前记录”的值。所以你的触发器就像是
CREATE TRIGGER AddItemSize FOR ITEMS
ACTIVE AFTER INSERT POSITION 100
AS
BEGIN
UPDATE STATS SET SIZE = SIZE + NEW.ITEMSIZE WHERE INSTANCE = 0;
END
答案 1 :(得分:0)
在这种情况下,检查SMALLINT INSTANCE是否为0,但是你写入INSTANCE ='0' - 它检查它是否为'0'值VARCHAR。尝试将其更改为INSTANCE = 0。