MERGE вывести курсор SP в таблицу? - PullRequest
0 голосов
/ 20 июля 2009

У меня есть хранимая процедура, которая возвращает вывод в виде курсора ссылки. Я хотел бы сохранить вывод в другой таблице, используя инструкцию MERGE. Однако у меня возникают проблемы при смешивании всех операторов (WITH, USING, MERGE и т. Д.).

Может кто-нибудь помочь? Спасибо!

Это таблица, в которую я хочу выводить данные (STOP_TIME специально пропущен):

TABLE: **USER_ALLOCATION**
START_TIME date   NOT NULL Primary Key
USER_ID    number NOT NULL Primary Key
TASK_ID    number NULL

Это ИП:

create or replace
PROCEDURE REPORT_PLAN_AV_USER
(
from_dt IN date,
to_dt IN date,
sysur_key IN number,
v_reservations OUT INTRANET_PKG.CURSOR_TYPE
)
IS
BEGIN

OPEN v_reservations FOR

  with  
      MONTHS as (select FROM_DT + ((ROWNUM-1) / (24*2)) as DT from DUAL connect by ROWNUM <= ((TO_DT - FROM_DT) * 24*2) + 1), 
      TIMES as (select DT as START_TIME,(DT + 1/48) as STOP_TIME from MONTHS where TO_NUMBER(TO_CHAR(DT,'HH24')) between 8 and 15 and TO_NUMBER(TO_CHAR(DT,'D')) not in (1,7))
  select 
    TIMES.START_TIME,
    TIMES.STOP_TIME,
    T.TASK_ID,
    sysur_key USER_ID,
  from 
    TIMES 
    left outer join (ALLOCATED_USER u INNER JOIN REQUIRED_RESOURCE r ON u.AU_ID = r.RR_ID INNER JOIN TASK t ON r.TASK_ID = t.TASK_ID)
      ON u.USER_ID = sysur_key AND t.PLAN_TYPE = 3 AND TIMES.start_time >= TRUNC30(t.START_DATE) AND TIMES.start_time < TRUNC30(t.FINISH_DATE)

  where u.USER_ID is null OR u.USER_ID = sysur_key
  order by START_TIME ASC;
END;

1 Ответ

2 голосов
/ 20 июля 2009

Я не думаю, что вы можете повторно использовать курсор, если вы не написали много процедурного кода.

Разве вы не можете написать один оператор слияния и удалить процедуру REPORT_PLAN_AV_USER?

Если вам все еще нужна процедура REPORT_PLAN_AV_USE, вы можете создать представление, которое вы используете в процедуре REPORT_PLAN_AV_USER и в своем операторе слияния (для предотвращения дублирования кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...