我如何测试一个 refcursor 是否已经在 plpgsql 中打开

普加

我正在尝试迁移 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从c#中的plpgsql函数返回refcursor?

如何检查文件是否已经在tcl中打开

如何检查数据是否已经在javascript中的数组中?

如何检查一个数字是否已经在数组中?

如何检查一个库是否已经在make文件中定义

如何检查是否已经在iOS中登录Facebook?

Twilio - 在启动之前确定一个号码是否已经在通话中

说我的许可证代码已经在使用中,是否可以激活Windows 7?

我已经在Scala列表中添加了一个函数,现在如何删除它?

如何知道用户是否已经在addrole命令中扮演角色

如何使用firebase实时数据库检查数据是否已经在html表中?

如何使用普通游标中的值打开sys_refcursor?

检查数据是否已经在列表中

我已经在命名空间之后向Visual Studio中打开了一个Laravel项目

如果OSX中已经在运行它,如何从Dock中打开一个新窗口

如果已经在android中打开了一个意图,如何不显示选项列表

Angular 2-如何编写ngIf来检查我是否已经在购物车中添加了东西?

如何知道我的应用程序中的用户是否已经在Paypal中发送过付款?

如何检查表中是否存在值-Postgres PLPGSQL

如何使用C#检查对象(必须在列表中插入)是否已经在列表中?

如何仅基于小麦来终止某些吊舱,或者它们是否已经在kubernetes中完成了特定的任务?

输入参数值,但我已经在查询中包含了一个

我已经在asp.net和c#中创建了一个页面,我希望此页面可以作为弹出窗口打开

我如何知道注释是否已经在地图视图上

如何找到一个字符串已经在PHP中的值

SailsJS 测试进程是否已经在运行

PyMongo检查条目是否已经在数组中

检查方法是否已经在对象实例中?

检查DataGrid中的项目是否已经在视图中