【问题标题】:Should I use a reference cursor here?我应该在这里使用参考光标吗?
【发布时间】:2010-10-08 10:07:29
【问题描述】:

我正在编写一个函数,它最终将使用几个可能的游标之一,为简单起见,我将在这里使用两个。在函数体中,我希望能够使用单个变量来描述使用的任何游标。我是为此使用参考光标还是其他什么?

在下面的示例中,我希望 FOR LOOP 使用 C1 或 C2,具体取决于 myChar 的值。因此,我不想在整个 FOR LOOP 周围放置一个 IF(或 CASE 语句),而是想让当前 C1 成为一个变量。这可行吗?

CREATE OR REPLACE FUNCTION MY_FUNCTION (myChar IN CHAR) RETURN INTEGER AS

光标 C1 是 选择 FIRST_NAME 来自员工;

光标 C2 是 选择 LAST_NAMES 来自员工;

开始

C1 循环中的 X - 做东西 结束循环; 返回 1;

结束我的功能;

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    是的,我没有对此进行测试,但它可能会起作用:

    CREATE OR REPLACE FUNCTION MY_FUNCTION (myChar IN CHAR) RETURN INTEGER AS
      type r_cursor is REF CURSOR;
      c1 r_cursor;
    begin
      IF myChar = "1" THEN
          open c1 for SELECT FIRST_NAME FROM EMPLOYEES;
      ELSE 
          open c1 for SELECT LAST_NAMES FROM EMPLOYEES;
      END IF;
    
      loop
          fetch c1 into c1recs;
    
          -- DO STUFF
    
          exit when c1%notfound;
      end loop;
      close c1;
    
      RETURN 1;
    end;
    

    【讨论】:

    • 有道理。我明天试试。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多