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