在DELETE之后创建触发器并更新所选语句

时间:2019-04-16 13:53:04

标签: sql postgresql database-trigger

我想在每次将新行添加到 ArrayA 时创建一个触发器。

这是我使用的代码:

CREATE TRIGGER increasement
    AFTER INSERT
    ON ArrayA
    FOR EACH ROW
    EXECUTE PROCEDURE func_increasement();

添加了一行,我需要更新 ArrayB 中的字段,但是问题是: 我需要知道已添加的新行的ID,以便知道要在ArrayB中增加哪一行。

这是我尝试过的:

CREATE OR REPLACE FUNCTION func_increasement()
    RETURNS trigger AS
$$
BEGIN
    IF (TG_OP = 'INSERT') THEN
        UPDATE ArrayB SET number = number + 1 
        WHERE ArrayB.id = ( SELECT ArrayA.arraya_id FROM ArrayA WHERE (SELECT COUNT(*) FROM ArrayA));
END;
$$ LANGUAGE plpgsql;

这是我用于获取行总数的查询。

    Select Count(*) from ArrayA; 

2 个答案:

答案 0 :(得分:1)

您可以使用NEW.id来引用表ArrayA中当前添加的行

在插入查询的情况下,Mysql将对新添加的行的引用保持为NEW。

答案 1 :(得分:1)

我认为您不需要条件,因为您只希望在class _MyListState extends State<MyList> { List<String> items = new List.generate(20, (index) => 'Hello $index'); @override Widget build(BuildContext context) { return new Scaffold( body: new Scrollbar( child: new ListView.builder( key: PageStorageKey("MyList"), // <-- Add this line itemBuilder: (context, index) { return new ListTile( title: Text(items[index] + ' index $index'), onTap: () { Navigator.push( context, new MaterialPageRoute( builder: (BuildContext context) => new MyScreen(index), )); }, ); }, itemCount: items.length, ), ), ); } } 事件之后运行触发器。另外,表INSERT中的初始值应为 默认情况下设置为0,或者在更新过程中需要ArrayB。另外,触发器应具有COALESCE语句。您可以为RETURN触发器返回NEWNULL,但是如果您都不使用它,它将失败。

AFTER

DEMO