我想在每次将新行添加到 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;
答案 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
触发器返回NEW
或NULL
,但是如果您都不使用它,它将失败。
AFTER