繁体   English   中英

将Oracle存储过程转换为PostgreSQL

[英]Converting an Oracle Stored Procedure to PostgreSQL

我面临着从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开发人员可以给我一个提示?

除非您没有告诉我们更多的内容,否则以下方法应该起作用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM