2016-11-30 10 views
0

При попытке создать следующее правило оракул цепи:Ошибка ORA-25448 при создании правила цепочки заданий с использованием dbms_scheduler.define_chain_rule

BEGIN 
    SYS.DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
    chain_name => 'MIGRATE_EISDB_CHAIN', 
    condition => ':MIGRATION_STEP_1.state=''RUNNING'' AND select decode(TIME_COMPLETED, null, 0, 1) from MIGRATION_PROGRESS where MIGRATION_STEP = "MIGRATE_AEP_TO_EP" > 0', 
    rule_name => 'continue_migration', 
    action  => 'START MIGRATION_STEP_2', 
    comments  => 'continue the migration - step 2'); 
END; 

/

цепи, шаги и первое правило были созданы успешно , но я получаю эту ошибку при создании второго правила с условием:

Сообщить об ошибке -
ORA-25448: правило EISYSNEW1.CONTINUE_MIGRATION имеет ошибки
ORA-00936: отсутствует выражение
ORA-06512: в "SYS.DBMS_ISCHED", строка 1646
ORA-06512: на "SYS.DBMS_SCHEDULER", линия 1619
ORA-06512: в строке 2
25448 . 00000 - «% s% s.% S имеет ошибки».
* Причина: попытка загрузить указанное правило или выражение не удалась из-за
ошибкам в правиле или выражении.
* Действие: Проверьте правило или выражение и повторите операцию.

Вопрос:

Почему это происходит ?? Документация Oracle говорит, что это условие должно быть законным. Что мне не хватает в выражении для этого условия? FYI: Создается, когда я пропускаю часть после «И».

condition => ':MIGRATION_STEP_1.state=''RUNNING'' AND select decode(TIME_COMPLETED, null, 0, 1) from MIGRATION_PROGRESS where MIGRATION_STEP = "MIGRATE_AEP_TO_EP" > 0', 

ответ

0

Я не вижу, где документация Oracle гласит, что это условие является законным. Это не выглядит слишком легальным для меня.

Вам нужно сделать вложенный подзапрос вложенным SELECT, обернув его в круглые скобки. Если MIGRATE_AEP_TO_EP - это имя столбца, вы также можете заменить двойные кавычки вокруг MIGRATE_AEP_TO_EP на одинарные кавычки. Поскольку само правило является строковым литералом, вам нужно будет избежать каждой отдельной оговорки со второй отдельной цитатой, как у вас есть с RUNNING:

condition => ':MIGRATION_STEP_1.state=''RUNNING'' AND (select decode(TIME_COMPLETED, null, 0, 1) from MIGRATION_PROGRESS where MIGRATION_STEP = ''MIGRATE_AEP_TO_EP'') > 0', 

 Смежные вопросы

  • Нет связанных вопросов^_^