Gam*_*per 3 sql postgresql triggers
CREATE OR REPLACE FUNCTION function_create_forum()
RETURNS trigger AS
$$
BEGIN
DECLARE id_course serial;
select id INTO id_course FROM INSERTED;
insert INTO Forum (course,name,type,staff_only) VALUES
(id_course,"Staff lounge",1,true);
--forum 2 creation
--forum 3 creation
END;
$$
LANGUAGE plpgsql VOLATILE;
Run Code Online (Sandbox Code Playgroud)
触发器功能应该创建一个新的论坛,只要创建一个课程,该课程有一个"id"字段,它是串行的,这是因为在"DECLARE"区域内不被接受而导致问题.
因为在评论中任何人继续指出上面的语法是不正确的(无论在所有其他不使用"serial"的触发器中工作正常)这里是另一个不起作用的代码变体.
CREATE OR REPLACE FUNCTION function_create_forum()
RETURNS trigger AS
$$
DECLARE
id_course int;
BEGIN
select id INTO id_course FROM INSERTED;
insert INTO Forum (course,name,type,staff_only) VALUES
(id_course,"Staff lounge",1,true);
--forum 2 creation
--forum 3 creation
END;
$$
LANGUAGE plpgsql VOLATILE;
Run Code Online (Sandbox Code Playgroud)
表创建:
CREATE TABLE Forum (
course serial REFERENCES Course(id) ON DELETE CASCADE NOT NULL,
--omitted details
);
CREATE TABLE Course (
id serial UNIQUE NOT NULL, --the primary key is another column
--omitted details
)
Run Code Online (Sandbox Code Playgroud)
正如其他人已经评论过的那样,没有"数据类型"序列.
数据类型smallserial,serial和bigserial不是真正的类型,而只是用于创建唯一标识符列的符号方便(类似于某些其他数据库支持的AUTO_INCREMENT属性)
强调我的
我能看到的一个基本问题是这一行:
select id INTO id_course FROM INSERTED;
Run Code Online (Sandbox Code Playgroud)
Postgres中没有"插入"虚拟表(例如在SQL Server中)如果创建行级触发器,则可以使用在触发器函数中隐式定义的NEW变量来访问新行的值.
另一个问题是"Staff lounge".双引号用于表示列(或表)名称,而不是字符文字.字符文字用SQL括在单引号中.
所以你的触发器功能应该是这样的:
CREATE OR REPLACE FUNCTION function_create_forum()
RETURNS trigger AS
$$
BEGIN
insert INTO Forum (course,name,type,staff_only) VALUES
(new.id,'Staff lounge',1,true);
--forum 2 creation
--forum 3 creation
END;
$$
LANGUAGE plpgsql VOLATILE;
Run Code Online (Sandbox Code Playgroud)
您没有向我们展示您的create trigger声明,但它应该是这样的,以确保您创建行级触发器:
CREATE TRIGGER course_insert_trg
AFTER INSERT ON course --<< AFTER is important!
FOR EACH ROW ---<<< this makes it a row level trigger
EXECUTE PROCEDURE function_create_forum();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3439 次 |
| 最近记录: |