我正面临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开发人员可以给我一个线索,如果该过程在语法上是正确的?
答案 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