运算符不存在整数:refcursor,42883 | Postgres

时间:2018-08-28 14:28:30

标签: postgresql cursor

我必须从3个表中删除记录。从第三个表(父表)中删除的条件是,仅当没有子记录时才应删除它。我正在使用游标,并尝试使用游标从表中删除。我正在尝试执行功能,但遇到标题中提到的错误。下面是我的代码:-

CREATE OR REPLACE FUNCTION housekeeping(
   OUT p_message_out CHARACTER VARYING,
   OUT p_sqlstate_out CHARACTER VARYING
   )
   RETURNS RECORD AS 
$BODY$

DECLARE 
v_msg CHARACTER VARYING(160);
v_sqlstate CHARACTER VARYING(6);
v_id INTEGER;
c_del CURSOR FOR SELECT employee_id FROM notification WHERE  sys_time<=CURRENT_TIMESTAMP - INTERVAL '30 Days';
v_del REFCURSOR;

BEGIN

OPEN c_del;
LOOP
FETCH c_del INTO v_del;
EXIT WHEN NOT FOUND;
delete from client where payment_id in(select payment_id from notification where sys_time<=CURRENT_TIMESTAMP - INTERVAL '30 Days');

delete from notification where sys_time<=CURRENT_TIMESTAMP - INTERVAL '30 Days';

select count(*) into v_id from notification where employee_id=v_del;
IF v_id=0 THEN
delete from employee where employee_id=v_del;
END IF;
END LOOP;

v_msg = 'Data deleted successfully.';
v_sqlstate = 1; 

p_message_out = v_msg;
p_sqlstate_out = v_sqlstate;

--Exception handling
EXCEPTION WHEN OTHERS THEN
p_message_out=SQLERRM;
p_sqlstate_out=SQLSTATE;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER

1 个答案:

答案 0 :(得分:1)

不需要循环甚至变量。

您可以使用相关的子查询在结尾处有条件地删除员工。

$thumbnail_id