3

私は、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 開発者はいますか?

4

1 に答える 1

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

于 2013-03-28T11:53:49.963 に答える