分配具有单行结果的查询时,错误不是已知变量
Error is not a known variable while assigning a query with a single row result
我有三个 table:处方、物品和订单。
处方和商品 table 都有一个名为价格的不可空列。
在订单 table 中,我有多个列。
- type - 'prescription' 或 'item'
的枚举
- 数量 - 不可为 null 的整数,默认值为 1
- 价格
我正在尝试创建触发器来检查订单类型是处方药还是订单,并将价格乘以金额插入订单 table。如果手动输入价格,我也会抛出错误,因为我只希望它在服务器端计算。
到目前为止我的代码是这样的。
CREATE OR REPLACE FUNCTION trg_orders_check()
RETURNS trigger
LANGUAGE plpgsql AS
$func$
BEGIN
IF NEW.type = 'prescription' AND NEW.prescription_id IS NULL THEN
RAISE EXCEPTION 'Must include prescription_id';
ELSIF NEW.TYPE = 'prescription' THEN
base_price := SELECT price FROM prescriptions
WHERE prescription_id = NEW.prescription_id;
INSERT INTO NEW (price) VALUES (base_price * NEW.amount);
ELSIF NEW.TYPE = 'item' AND NEW.item_id IS NULL THEN
RAISE EXCEPTION 'Must include item_id';
ELSIF NEW.TYPE = 'prescription' THEN
base_price float := SELECT price FROM orders
WHERE item_id = NEW.item_id;
INSERT INTO NEW (price) VALUES (base_price * NEW.amount);
ELSE
RAISE EXCEPTION 'Type must be either prescription or item';
END IF;
END
$func$;
现在我遇到了错误
"base_price" is not a known variable
我会得到同样的错误base_price float := ...expression
我想知道是什么导致了这个错误,更广泛地说,这是否是我上面概述的创建触发器的正确方法。任何帮助将不胜感激。
不支持这种变量声明语法。你应该在块之前使用 DECLARE statement
。
DECLARE x int;
BEGIN
x := 10;
END
我有三个 table:处方、物品和订单。 处方和商品 table 都有一个名为价格的不可空列。 在订单 table 中,我有多个列。
- type - 'prescription' 或 'item' 的枚举
- 数量 - 不可为 null 的整数,默认值为 1
- 价格
我正在尝试创建触发器来检查订单类型是处方药还是订单,并将价格乘以金额插入订单 table。如果手动输入价格,我也会抛出错误,因为我只希望它在服务器端计算。
到目前为止我的代码是这样的。
CREATE OR REPLACE FUNCTION trg_orders_check()
RETURNS trigger
LANGUAGE plpgsql AS
$func$
BEGIN
IF NEW.type = 'prescription' AND NEW.prescription_id IS NULL THEN
RAISE EXCEPTION 'Must include prescription_id';
ELSIF NEW.TYPE = 'prescription' THEN
base_price := SELECT price FROM prescriptions
WHERE prescription_id = NEW.prescription_id;
INSERT INTO NEW (price) VALUES (base_price * NEW.amount);
ELSIF NEW.TYPE = 'item' AND NEW.item_id IS NULL THEN
RAISE EXCEPTION 'Must include item_id';
ELSIF NEW.TYPE = 'prescription' THEN
base_price float := SELECT price FROM orders
WHERE item_id = NEW.item_id;
INSERT INTO NEW (price) VALUES (base_price * NEW.amount);
ELSE
RAISE EXCEPTION 'Type must be either prescription or item';
END IF;
END
$func$;
现在我遇到了错误
"base_price" is not a known variable
我会得到同样的错误base_price float := ...expression
我想知道是什么导致了这个错误,更广泛地说,这是否是我上面概述的创建触发器的正确方法。任何帮助将不胜感激。
不支持这种变量声明语法。你应该在块之前使用 DECLARE statement
。
DECLARE x int;
BEGIN
x := 10;
END