powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по курсору
11 сообщений из 11, страница 1 из 1
Вопрос по курсору
    #40027924
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp, choice IN INT) IS
BEGIN
IF choice = 1 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE comm IS NOT NULL;
ELSIF choice = 2 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE sal > 2500;
ELSIF choice = 3 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE deptno = 20;
END IF;
END;

Подскажите как нужно перезаписать код чтобы была возможность сделать union результата первого силекта, второго, третьего
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40027929
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu
сделать union результата

open.. for select .. union select .. union select ..

Попробуйте внятно сформулировать, что вам на самом деле надо
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40027952
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Да не так написал
есть функция

сreate or replace function f_api(p_emp in varchar2, p_emp_id in integer)

return integer is
cur sys_refcursor;

BEGIN
IF emp='engineer' THEN
OPEN cur for
Select * from EMPLOYEE
where emp_id=p_emp_id;
UNION ALL
ELSIF emp='doctor' THEN
OPEN cur for
Select * from EMPLOYEE
where emp_id=p_emp_id;
END IF;

return 0;


END;

В функцию должен передаваться список p_emp (может состоять из ('engineer', 'doctor') или из одного значения 'engineer') . Так вот в зависимости от этого нужно делать два UNION или один

Как это реализовать?
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40027954
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

Ничего не понял, но очень интересно. Попробуем ещё раз.

Какую задачу вы решаете на самом деле?

з.ы. Пока что задача больше похожа на "выстрелить себе в ногу"
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40027955
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Есть функция в которую передается список и emp_id. Нужно вывести или результат обьединения (так как список состоит из двух параметров doctor и engineer ИЛИ результат одного селекта - если в качестве параметра передается одно значение в списке)

Что непонятно, неясно?

сreate or replace function f_api(p_emp in varchar2, p_emp_id in integer)

return integer is
cur sys_refcursor;

BEGIN
IF emp='engineer' THEN
OPEN cur for
Select * from EMPLOYEE
where emp_id=p_emp_id;
UNION ALL
ELSIF emp='doctor' THEN
OPEN cur for
Select * from EMPLOYEE
where emp_id=p_emp_id;
END IF;

return 0;


END;
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40027959
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понимаю что список это nesteed loop
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40028003
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В текущей постановке задачи ваш вопрос не имеет смысла. Приведённый код - поток бреда и только сбивает с толку.

Опишите какую задачу решаете и почему выбран такой способ решения.
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40028151
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu
PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp, choice IN INT) IS
BEGIN
IF choice = 1 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE comm IS NOT NULL;
ELSIF choice = 2 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE sal > 2500;
ELSIF choice = 3 THEN
OPEN emp_cv FOR SELECT * FROM emp WHERE deptno = 20;
END IF;
END;

Подскажите как нужно перезаписать код чтобы была возможность сделать union результата первого силекта, второго, третьего



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
   BEGIN
      IF choice = 1 THEN
         OPEN emp_cv FOR SELECT * FROM emp WHERE comm IS NOT NULL;
      ELSIF choice = 2 THEN
         OPEN emp_cv FOR SELECT * FROM emp WHERE sal > 2500;
      ELSIF choice = 3 THEN
         OPEN emp_cv FOR SELECT * FROM emp WHERE deptno = 20;
      ELSIF choice = 4 THEN
         OPEN emp_cv FOR
             SELECT * FROM emp WHERE comm IS NOT NULL
             UNION
             SELECT * FROM emp WHERE sal > 2500
             UNION
             SELECT * FROM emp WHERE deptno = 20;
      END IF;
   END;



Но можно и так


Код: plsql
1.
2.
3.
4.
5.
6.
7.
   BEGIN
         OPEN emp_cv FOR
             SELECT * FROM emp WHERE choice = 1 and comm IS NOT NULL
             UNION
             SELECT * FROM emp WHERE choice = 2 and sal > 2500
             UNION
             SELECT * FROM emp WHERE choice = 3 and deptno = 20;
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40028240
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем там UNION вообще?
Код: plsql
1.
SELECT * FROM emp WHERE comm IS NOT NULL OR sal > 2500 OR deptno = 20;
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40028354
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256,


В итоге сделал через парсинг json , на вход подал clob
...
Рейтинг: 0 / 0
Вопрос по курсору
    #40028358
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu
В итоге сделал через парсинг json , на вход подал clob
Таки
env
"выстрелить себе в ногу"
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по курсору
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]