1
我正面临Oracle到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的开发者,可以给我一个线索,如果程序在语法上是正确的
不能使用'commit' Postgres里的函数内,你不需要光标在所有的(无论是在Oracle和Postgres里)这可以用一个'INSERT ... SE完成LECT声明'。如果你根本没有更新'amm_role',你为什么要用'update'呢? – 2013-03-28 11:47:25
按照@a_horse的建议,只用'sql'(没有'declare','begin','end'),除非在需要plpgsql的函数中有更多。声明使用的语言'language sql'或'language plpgsql' – 2013-03-28 11:52:35