私たちは以下のようにPL/SQL(Oracleの)で記述された機能があります。今PostgreSQLのループのカーソル
CREATE OR REPLACE PROCEDURE folder_cycle_check (folder_key IN NUMBER, new_parent_folder_key IN NUMBER) IS
parent_of_parent NUMBER;
ILLEGAL_CYCLE EXCEPTION;
CURSOR parent_c IS
SELECT parent_folder_key FROM folder
WHERE folder_key = new_parent_folder_key;
BEGIN
IF folder_key = new_parent_folder_key THEN
RAISE ILLEGAL_CYCLE;
END IF;
FOR parent_rec IN parent_c LOOP
BEGIN folder_cycle_check(folder_key, parent_rec.parent_folder_key); END;
END LOOP;
END;
を、私は似て達成するためにPL/pgSQL(PostgreSQLの)で、この同じ手順を書き換える必要があり機能性。私を助けて、pl/pgsql関数を送ってください。
編集(コメントからフォーマットされたコード)
CREATE OR REPLACE FUNCTION folder_cycle_check(IN folder_key INTEGER, IN new_parent_folder_key INTEGER)
RETURNS VOID
AS $procedure$
DECLARE parent_of_parent INTEGER;
PARENT_C CURSOR FOR
SELECT parent_folder_key
FROM folder
WHERE folder_key = new_parent_folder_key;
BEGIN
IF folder_key = new_parent_folder_key THEN
RAISE EXCEPTION 'ILLEGAL_CYCLE';
END IF
FOR parent_rec IN (SELECT parent_folder_key FROM folder WHERE folder_key = new_parent_folder_key) LOOP
PERFORM folder_cycle_check(folder_key,parent_rec.parent_folder_key);
END LOOP;
RETURN;
END;
$procedure$
LANGUAGE plpgsql;
あなたのPostgresのソリューションですべてのコンパイルエラーを持っていますか?はいの場合は、Postgresコード –
と一緒に投稿してください。あなたの試行は何ですか?これは「私の仕事をしてください」というサイトではないことを覚えておいてください。試してみる必要があります。ここでは餌をスプーンしません。 – Bohemian
種類の返信のためにボヘミアンに感謝します。これが私の試みです。 CREATE OR REPLACE FUNCTION folder_cycle_check(IN folder_key INTEGER、IN new_parent_folder_key INTEGER) $手続き$DECLARE parent_of_parent INTEGERに戻ります。 PARENT_C CURSOR FOR SELECT parent_folder_key FROMフォルダ WHERE folder_key = new_parent_folder_key; BEGIN IF folder_key = new_parent_folder_keyそれから RAISE EXCEPTION 'ILLEGAL_CYCLE'; END IF – vchitta