我正面临从 Oracle 到 PostgreSQL 的迁移:我设法转换了表和视图,但是我对存储过程有点卡住了。
我从这个开始,它在 Oracle 中看起来像这样:
CREATE OR REPLACE procedure
  update_role_func_def(function_id varchar2)
as
  cursor role_list_cursor is
   select r.id from amm_role r
    for update of r.id
   ;
begin
  for role_record in role_list_cursor
   loop
     insert into AMM_ROLE_FUNC_DEF (RID, FID, GRANT_FUNCT) values (role_record.id,    function_id, 'N');
  end loop;
  commit;
end update_role_func_def;
查看我设法创建这个等价物的文档:
CREATE FUNCTION 
  update_role_func_def(function_id varchar)
  returns void 
as
$$
DECLARE
  cursor role_list_cursor is
    select r.id from amm_role r  for update of r.id  ;
begin
  for role_record in role_list_cursor
  loop
    insert into AMM_ROLE_FUNC_DEF (RID, FID, GRANT_FUNCT) values (role_record.id, function_id, 'N');
  end loop;
  commit;
end ;
$$
但是,在 PgAdmin 中输入此过程会导致“语法错误,意外 CREATE,期望 ';'
我感到有点失落:如果程序在语法上是正确的,是否有任何 Postgres 开发人员可以给我一个线索?