pgSQL使用表名作为update语句的参数更新游标中的当前行

时间:2018-08-23 12:59:55

标签: database postgresql plpgsql

我正在用pgSQL编写一个函数,并且在该函数内部有一个游标逐行遍历一个表,如果满足条件,则该行将按以下方式更新:

UPDATE company SET code = 5 WHERE CURRENT OF company_cursor;

但是表名是传递给函数的参数,我知道我可以使用 执行类似这样的功能:

Execute 'UPDATE ' || table_name || ' SET code = 5 WHERE CURRENT OF company_cursor';

但是问题在于,将“ CURRENT OF company_cursor”与Execute函数一起使用会产生语法错误。

我的功能是这样的:

CREATE or replace FUNCTION fun(table_name TEXT)
RETURNS integer AS $$
DECLARE 
 cnt integer DEFAULT 0;
 curr_rec   RECORD;
 prev_rec   RECORD;
 mycursor REFCURSOR;
 query1 text;
BEGIN 
   OPEN mycursor for EXECUTE  query1  ; 
   LOOP
      FETCH mycursor INTO curr_rec;
      EXIT WHEN NOT FOUND;

      if cnt > 0 then      
          if  prev_rec.code = curr_rec.code then
               UPDATE company SET code = 1 WHERE CURRENT OF mycursor;
           end if;
      end if;

        prev_rec := curr_rec;
        cnt := cnt + 1;    
   END LOOP;
   CLOSE mycursor;
 return 1;
END; $$ 
LANGUAGE plpgsql;

那么有人可以告诉我在这种情况下如何使用“ CURRENT OF”吗?

0 个答案:

没有答案