19.01.2007 16:32
kadr
 
Код:
CREATE OR REPLACE FUNCTION DUPOFJOBSSR(ORIGINJOB IN INTEGER,
                                       NEWNAME   IN VARCHAR2)
  RETURN INTEGER IS
  RESULT  INTEGER;
  NEWID   INTEGER;
  ALLSHOP INTEGER;
BEGIN
--задание-источник должно существовать и быть активным, т.е. должна стоять галочка "Исполнение разрешено"
  RESULT := 0;
  -- создание нового джоба на основе полученных данных
  --новый максимальный номер
  SELECT GREATEST(1, NVL(MAX(ID), 0) + 1)
    INTO NEWID
    FROM SUPERMAG.SMCONTROLTASKS;
  --сохранения параметров задания  
  INSERT INTO SUPERMAG.SMCONTROLTASKS
    (ID,
     TITLE,
     FNTYPE,
     FNID,
     SCHEDTYPE,
     DAYMASK,
     INTERVALLEN,
     INTERVALSTART,
     INTERVALEND,
     ONETIME)
    SELECT NEWID,
           NEWNAME,
           OT.FNTYPE,
           OT.FNID,
           OT.SCHEDTYPE,
           OT.DAYMASK,
           OT.INTERVALLEN,
           OT.INTERVALSTART,
           OT.INTERVALEND,
           OT.ONETIME
      FROM SUPERMAG.SMCONTROLTASKS OT
     WHERE OT.ID = ORIGINJOB;
  --сохранение параметров расчёта сср
  INSERT INTO SUPERMAG.SMSALERATETASKPARAM
    (TASKID,
     MAXDURATION,
     DATEFROM,
     DATETO,
     CALCALG,
     INCLUDEDAYS,
     SALERATERANGE,
     WITHRETURN,
     ALLSHOPS)
    SELECT NEWID,
           OTP.MAXDURATION,
           OTP.DATEFROM,
           OTP.DATETO,
           OTP.CALCALG,
           OTP.INCLUDEDAYS,
           OTP.SALERATERANGE,
           OTP.WITHRETURN,
           OTP.ALLSHOPS
      FROM SUPERMAG.SMSALERATETASKPARAM OTP
     WHERE OTP.TASKID = ORIGINJOB;
  --удаление мест хранения для этого задания (на всякий случай)
  DELETE FROM SUPERMAG.SMSALERATETASKLOCS WHERE TASKID = NEWID;
  -- проверка списка магазинов: все или не все 
  ALLSHOP := 1;
  SELECT OTP.ALLSHOPS
    INTO ALLSHOP
    FROM SUPERMAG.SMSALERATETASKPARAM OTP
   WHERE OTP.TASKID = ORIGINJOB;
  IF (ALLSHOP) = 0 THEN
    -- если не все, то копируем
    INSERT INTO SUPERMAG.SMSALERATETASKLOCS
      (TASKID, SHOPID)
      SELECT NEWID, SHOPID
        FROM SUPERMAG.SMSALERATETASKLOCS
       WHERE TASKID = ORIGINJOB;
  END IF;
  --удаление разделов классификатора для этого задания (на всякий случай)
  DELETE FROM SUPERMAG.SMSALERATETASKCLS WHERE TASKID = NEWID;
  --
  INSERT INTO SUPERMAG.SMSALERATETASKCLS
    (TASKID, TREE)
    SELECT NEWID, TREE
      FROM SUPERMAG.SMSALERATETASKCLS
     WHERE TASKID = ORIGINJOB;
  --здесь явно указывается что это расчёт сср
  BEGIN
    SUPERMAG.SMINITTASKJOB(NEWID, 0, 'WH', 0);
  END;
  COMMIT;
  RESULT := NEWID;
  RETURN(RESULT);
END DUPOFJOBSSR;
20.01.2007 06:28
isi
 
Можно узнать - это зачем?
20.01.2007 09:27
Mtirt
 
Я просила. Мне нужно клонировать большое количество заданий в базы магазинов...
Часовой пояс GMT +3, время: 19:22.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.