我试图执行查询并给我一个错误,但我不明白为什么?

时间:2018-10-19 23:53:02

标签: postgresql plpgsql

DROP FUNCTION IF EXISTS top_5(customers.customerid%TYPE, products.prod_id%TYPE, orderlines.quantity%TYPE) CASCADE;

CREATE OR REPLACE FUNCTION top_5(c_id customers.customerid%TYPE, p_id products.prod_id%TYPE, quant orderlines.quantity%TYPE)

RETURNS orders.orderid%TYPE AS $$
DECLARE

top_prod CURSOR IS 

SELECT inv.prod_id 
  FROM inventory AS inv, products AS prod 
 WHERE inv.prod_id=prod.prod_id
 ORDER BY inv.quan_in_stock desc, inv.sales
limit 5;

ord_id orders.orderid%TYPE;
ord_date orders.orderdate%TYPE:= current_date;
ordln_id orderlines.orderlineid%TYPE:=1;

BEGIN
  SELECT nova_orderid() INTO ord_id;

  INSERT INTO orders(orderid, orderdate,customerid,netamount,tax,totalamount) VALUES(ord_id,ord_date,c_id,0,0,0);

  PERFORM compra(c_id, p_id, 1::smallint, ord_id, ordln_id, ord_date);

  IF (p_id  = top_prod) THEN 
    UPDATE orders 
       SET totalamount = totalamount - (totalamount*0.2)
     WHERE ord_id = (SELECT MAX(ord_id) FROM orders);
  END IF;
END;
$$ LANGUAGE plpgsql;

我有以下代码,当我尝试执行此代码时

SELECT top_5(1,1,'2');

我有这个错误

错误:运算符不存在:integer = refcursor 第1行:SELECT(p_id = top_prod)

1 个答案:

答案 0 :(得分:0)

您需要从游标“ top_prod”获取“ prod_id”值。 您无法比较两种类型。 试试这个,

String serviceProvider = "6";