我正在尝试迁移 Postgres 中的 Oracle 过程/函数,其中我发现处理 PostgreSQL 中的游标语法几乎没有困难。Oracle proc 代码段是:
IF v_user_auth THEN
OPEN no_emp_cur;
ELSE
OPEN un_auth_no_emp_cur;
END IF;
ELSE
IF v_direction = 'newer' THEN
IF v_user_auth THEN
OPEN newer_cur;
ELSE
OPEN un_auth_new_cur;
END IF;
ELSE -- older
IF v_user_auth THEN
OPEN older_cur;
ELSE
OPEN un_auth_old_cur;
END IF;
END IF;
END IF;
LOOP
IF no_emp_cur%ISOPEN THEN
FETCH no_emp_cur INTO v_emp_rec;
IF NOT FOUND THEN EXIT; END IF; -- apply on no_emp_cur
ELSIF un_auth_no_emp_cur%ISOPEN THEN
FETCH un_auth_no_emp_cur INTO v_emp_rec;
IF NOT FOUND THEN EXIT; END IF; -- apply on un_auth_no_emp_cur
ELSIF newer_cur%ISOPEN THEN
FETCH newer_cur INTO v_emp_rec;
IF NOT FOUND THEN EXIT; END IF; -- apply on newer_cur
ELSIF older_cur%ISOPEN THEN
FETCH older_cur INTO v_emp_rec;
IF NOT FOUND THEN EXIT; END IF; -- apply on older_cur
ELSIF un_auth_new_cur%ISOPEN THEN
FETCH un_auth_new_cur INTO v_emp_rec;
IF NOT FOUND THEN EXIT; END IF; -- apply on un_auth_new_cur
ELSIF un_auth_old_cur%ISOPEN THEN
FETCH un_auth_old_cur INTO v_emp_rec;
IF NOT FOUND THEN EXIT; END IF; -- apply on un_auth_old_cur
END IF;
Few Processing ...
END LOOP;
IF no_emp_cur%ISOPEN THEN
CLOSE no_emp_cur;
ELSIF un_auth_no_emp_cur%ISOPEN THEN
CLOSE un_auth_no_emp_cur;
ELSIF newer_cur%ISOPEN THEN
CLOSE newer_cur;
ELSIF older_cur%ISOPEN THEN
CLOSE older_cur;
ELSIF un_auth_new_cur%ISOPEN THEN
CLOSE un_auth_new_cur;
ELSIF un_auth_old_cur%ISOPEN THEN
CLOSE un_auth_old_cur;
END IF;
END IF;
请帮助使用在 postgres 中迁移它的语法。
提前致谢!
使用未绑定的游标变量。
DECLARE
c refcursor;
BEGIN
IF ... THEN
OPEN c FOR SELECT ...;
ELSE
OPEN c FOR SELECT ...;
END IF;
LOOP
FETCH c INTO v_emp_rec;
...
END LOOP;
CLOSE c;
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句