Почему мой Stored Procedue работает хорошо, когда я запускаю команду EXE C, но не работает в моей цепочке баз данных? (ORACLE) - PullRequest
0 голосов
/ 25 марта 2020

Я создаю некоторую программу БД, создаю цепочку, определяю шаги и правила.

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 разработчике, и я получаю все необходимые данные. Почему он не работает после того, как я положил это в цепочку?

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