Oracle 18C中的触发问题,'声明内容'

问题描述 投票:0回答:1

嗨,我尝试创建触发器时确实遇到了一些问题。

`CREATE OR REPLACE TRIGGER summary_check
BEFORE UPDATE OR INSERT ON POST
FOR EACH ROW
BEGIN 
IF : NEW.summary != SUBSTR(content,1,11) || '...' THEN
RAISE_APPLICATION_ERROR(-20001,'The summary rule need to be followed');
END IF;
END;`

这个有一个编译后的问题,我需要声明内容,然后如果我使用post.content,它告诉我这种上下文是不允许的?它们都是VARVHAR,因此它们是同一类型。不是用户我应该在这里更改什么。

`CREATE OR REPLACE TRIGGER date_check
BEFORE UPDATE OR INSERT ON Likes
FOR EACH ROW
DECLARE
V_DATE DATE;
BEGIN 
SELECT created_on
INTO V_DATE
FROM post
WHERE post_id = post.post_id;
IF : NEW.liked_on < v_date THEN
RAISE_APPLICATION_ERROR(-20001,'the date have to entered correctly ');
END IF;
END;`

这是另一个,编译没有问题,但是当我尝试测试触发器时,它总是说确切的获取返回的值比请求的多,不确定如何更改它?

sql oracle
1个回答
0
投票

此查询:

SELECT created_on
INTO V_DATE
FROM post
WHERE post_id = post.post_id;

没有按照您的意愿去做。 post_id也指post.post_id。因此,这将返回post中的所有行,其中post_id不是NULL

我认为您想要:

SELECT p.created_on
INTO V_DATE
FROM post p
WHERE :NEW.post_id = p.post_id;
© www.soinside.com 2019 - 2024. All rights reserved.