Должен ли я использовать ссылочный курсор здесь? - PullRequest
0 голосов
/ 18 февраля 2009

Я пишу функцию, которая в конечном итоге будет использовать один из нескольких возможных курсоров, для простоты я буду использовать два здесь. В теле функции я хочу использовать одну переменную для описания того, какой курсор используется. Я использую курсор ссылки для этого или что-то еще?

В приведенном ниже примере я хочу, чтобы FOR LOOP использовал либо C1, либо C2 в зависимости от значения myChar. Поэтому вместо того, чтобы помещать IF (или оператор CASE) вокруг всего цикла FOR LOOP, я хочу сделать переменную, которая в данный момент является C1. Это выполнимо?

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ MY_FUNCTION (myChar IN CHAR) ВОЗВРАТИТЬ INTEGER AS

КУРСОР С1 ЕСТЬ ВЫБЕРИТЕ FIRST_NAME ОТ СОТРУДНИКОВ;

CURSO C2 IS ВЫБЕРИТЕ LAST_NAMES ОТ СОТРУДНИКОВ;

НАЧАТЬ

ДЛЯ X IN C1 LOOP - DO STUFF КОНЕЦ ЦИКЛА; ВОЗВРАТ 1;

END MY_FUNCION;

1 Ответ

2 голосов
/ 18 февраля 2009

Да, я не проверял это, но это может сработать:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...