我应该在这里使用参考光标吗?

时间:2009-02-18 18:48:03

标签: oracle plsql

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

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

创建或替换功能MY_FUNCTION(myChar IN CHAR)返回INTEGER AS

CURSOR C1 IS 选择FIRST_NAME 来自员工;

CURSO C2 IS 选择LAST_NAMES 来自员工;

BEGIN

FOR X IN C1 LOOP         - 做东西    结束循环;    返回1;

结束MY_FUNCION;

1 个答案:

答案 0 :(得分:2)

是的,我没有对此进行测试,但可能会有效:

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;