我正在用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”吗?