Я создаю некоторую программу БД, создаю цепочку, определяю шаги и правила.
BEGIN
DBMS_SCHEDULER.CREATE_CHAIN (
chain_name => 'Manual_Auto_Refresh',
rule_set_name => NULL,
evaluation_interval => NULL,
comments => NULL);
END;
BEGIN
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step1', 'PROGRAM_IC_LOCATIONHEADER_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step2', 'PROGRAM_IC_R_CODEDATE_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step3', 'PROGRAM_IC_R_DNOPEPORT_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step4', 'PROGRAM_IC_R_HEALTHCHECKMAX_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step5', 'PROGRAM_IC_R_HEALTHCHECKSPL_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step6', 'PROGRAM_IC_R_MISSPULLZONE_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step7', 'PROGRAM_IC_R_NEWSKUS_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step8', 'PROGRAM_IC_R_NUTSANDBOLTS_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step9', 'PROGRAM_IC_R_ONLYLISTEDITEMS_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step10', 'PROGRAM_IC_R_VALIILNWEIGHT_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step11', 'PROGRAM_IC_CLOSE_TASK');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step12', 'PROGRAM_IC_CREATE_TASK_0');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('Manual_Auto_Refresh', 'step13', 'PROGRAM_IC_REGRESH_TOGGLE');
END;
BEGIN
DBMS_SCHEDULER.DEFINE_CHAIN_RULE('Manual_Auto_Refresh', 'TRUE', 'START step1, step2, step3, step4, step5, step6, step7, step8, step9, step10');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('Manual_Auto_Refresh', 'step1 COMPLETED AND step2 COMPLETED AND step3 COMPLETED AND step4 COMPLETED AND step5 COMPLETED AND step6 COMPLETED AND step7 COMPLETED AND step8 COMPLETED AND step9 COMPLETED AND step10 COMPLETED', 'START step11');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('Manual_Auto_Refresh', 'step11 COMPLETED', 'START step12');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('Manual_Auto_Refresh', 'step12 COMPLETED', 'START step13');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('Manual_Auto_Refresh', 'step13 COMPLETED', 'END');
END;
Шаг 11 запускается после завершения шага 1 - шаг 10, и каждая программа является хранимой процедурой.
На данный момент моя цепочка всегда будет зависать на Step12 , и она никогда не завершится или не выдаст ошибку ...
Я пытаюсь запустить хранимую процедуру для шага 12, используя EXE C команда и она выполняется безупречно.
STEP12 - это хранимая процедура, выполняющая вставку данных в одну таблицу.
и вот код для хранимой процедуры Шаг 12:
create or replace PROCEDURE IC_CREATE_TASKS_P AS
startnumber number(10,0);
maxCount number(10,0);
taskName varchar(254);
BEGIN
SELECT count(*) INTO maxCount from ICRTASKREFERENCE;
startnumber:=1;
WHILE startnumber <= maxCount
LOOP
SELECT TASKCODE INTO taskName from ICRTASKREFERENCE WHERE TASKREFERENCEID = startnumber;
taskName := UPPER(taskName);
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO ICTASK (
STATUS,
ISDELETED,
DC,
SOURCETABLEID,
CATEGORY,
TASKCODE,
TASKTYPE,
SOURCETABLECODE,
MODIFIEDON,
MODIFIEDBY,
CREATEDON,
PRIORITY,
WAC,
LOCNID
)
SELECT
''OPEN'',
''0'',
newFlag.WHSE,
newFlag.MSTID,
taskReferenceTable.CATEGORY,
taskReferenceTable.TASKCODE,
taskReferenceTable.TASKTYPE,
taskReferenceTable.SOURCETABLECODE,
SYSDATE,
''Administrator'',
SYSDATE,
taskReferenceTable.PRIORITY,
newFlag.WAC,
newFlag.LOCNID
FROM
(SELECT * from '||taskName||' WHERE NEWFLAG = 1) newFlag cross join (SELECT * from ICRTASKREFERENCE WHERE TASKREFERENCEID = '||startnumber||' ) taskReferenceTable WHERE MSTID NOT IN (SELECT SOURCETABLEID FROM ICTASK)';
--DBMS_OUTPUT.PUT_LINE( ''||taskName||' ' );
END;
startnumber := startnumber +1 ;
END LOOP;
END;
Дело в том, что EXE C команда запускает хранимую процедуру в SQL разработчике, и я получаю все необходимые данные. Почему он не работает после того, как я положил это в цепочку?