我們寫在PL/SQL(Oracle)的如下功能:光標for循環中的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) RETURNS VOID AS $ procedure $ 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 THEN RAISE EXCEPTION'ILLEGAL_CYCLE'; END IF – vchitta