将Oracle存储过程转换为PostgreSQL

时间:2013-03-28 11:29:24

标签: postgresql

我正面临Oracle to 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中输入此过程会导致“语法错误,意外创建,期待';'

我感到有点迷茫:是否有任何Postgres开发人员可以给我一个线索,如果该过程在语法上是正确的?

1 个答案:

答案 0 :(得分:4)

除非你告诉我们的更多内容,否则以下内容应该有效:

create or replace function update_role_func_def(function_id varchar)
  returns void 
as
$$
  insert into AMM_ROLE_FUNC_DEF (RID, FID, GRANT_FUNCT) 
  select r.id, function_id, 'N'
  from amm_role r;
$$
language sql;

这是一个SQLFiddle示例:http://sqlfiddle.com/#!12/aed49/1