запуск сценария в приложении Oracle Express SQL Scripts приводит к ошибке, но работает нормально при запуске в команде SQL и SQLDeveloper

Я получаю эту ошибку с этим скриптом (показан ниже), когда я запускаю его в SQL-скриптах приложения оракула, но не в разделе команд SQL экспресс-приложения или в SQL Developer. Есть объяснение почему?

ORA-20001: Запрос должен начинаться с SELECT или WITH

UPDATE (SELECT w.bay_caseflow_sku_count, 
           CASE WHEN combined_layer_qty <= 0 
       AND bay_activity > 0 
       AND adjusted_bay_USPD * day_count <= bay_activity * caseflow_uspd_max THEN 1 
                ELSE 0 END AS new_bay, 
           w.bulk_caseflow_sku_count, 
           CASE WHEN combined_layer_qty <= 0 
       AND bulk_activity > 0 
       AND adjusted_bulk_USPD * day_count <= bulk_activity * caseflow_uspd_max THEN 1 
                ELSE 0 END AS new_bulk, 
           w.combined_caseflow_sku_count, 
           CASE WHEN combined_layer_qty <= 0 
       AND adjusted_combined_USPD <= caseflow_uspd_max THEN 1 
                ELSE 0 END AS new_combined 
      FROM extract_work_001 w 
           INNER JOIN control_records c 
              ON w.loc_id = c.loc_id 
     WHERE w.combined_layer_qty = 0) t 
SET bay_caseflow_sku_count = new_bay, 
   BULK_CASEFLOW_SKU_COUNT = NEW_BULK, 
   COMBINED_CASEFLOW_SKU_COUNT = NEW_COMBINED

person Steve Wold    schedule 17.09.2014    source источник


Ответы (1)


Похоже, это ошибка, хотя я не могу найти ничего подобного в MOS. Код ошибки ORA-20001 означает, что это ошибка, определяемая приложением, поэтому APEX, похоже, анализирует оператор и, возможно, имеет проблему с чувствительностью к регистру.

Если я создам фиктивную таблицу с именем t42, то ввод простой команды с той же структурой, что и у вас, приведет к той же ошибке:

UPDATE (SELECT * FROM T42)
SET X = NULL

ORA-20001: Query must begin with SELECT or WITH

Если я изменю просто SELECT на select, тогда это сработает:

UPDATE (select * FROM T42)
SET X = NULL

0 row(s) updated. 0.02 seconds

Запуск вашего точного оператора также получает ORA-20001; снова простое изменение SELECT на select проходит мимо этого, и вместо этого я получаю ORA-00942: table or view does not exist, что разумно, поскольку у меня нет определенных ваших таблиц.

Это тестовая рабочая область по адресу https://apex.oracle.com. Я могу только догадываться, что APEX анализирует скрипт перед попыткой его выполнить, но что именно он делает под капотом, остается загадкой. Не очень удовлетворительное объяснение, но, по крайней мере, кажется, что есть обходной путь...

person Alex Poole    schedule 17.09.2014
comment
Спасибо, чувак, это сработало. Это довольно странно. У меня есть серия из 70 скриптов, и только два отформатированных как пример не работали. Спасибо еще раз - person Steve Wold; 17.09.2014