分配具有单行结果的查询时,错误不是已知变量

Error is not a known variable while assigning a query with a single row result

我有三个 table:处方、物品和订单。 处方和商品 table 都有一个名为价格的不可空列。 在订单 table 中,我有多个列。

  1. type - 'prescription' 或 'item'
  2. 的枚举
  3. 数量 - 不可为 null 的整数,默认值为 1
  4. 价格

我正在尝试创建触发器来检查订单类型是处方药还是订单,并将价格乘以金额插入订单 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