Как я могу запустить для l oop в случае в операторе выбора (Oracle база данных) - PullRequest
0 голосов
/ 28 января 2020

Для того, чтобы это имело некоторый смысл, давайте подумаем, что я проверяю все свои предметы в основном списке. Одна из моих проверок состоит в том, чтобы видеть, является ли определенный элемент ингредиентом в рецептах пирога. Я хочу выполнить некоторые дополнительные проверки ингредиентов в зависимости от условий на тортах. Не все ингредиенты в мастере используются в рецептах тортов.

Внутри CASE в инструкции SELECT я пытаюсь перебрать все уникальные пироги, в состав которых может входить ингредиент. Если ингредиент есть в рецепте, тогда я делаю FOR L OOP для всех тортов. Прямо сейчас мой код работает хорошо без FOR L OOP, но, как только я его добавлю, он выдаст мне следующую ошибку:

ORA-00936: отсутствует выражение

Это мой код (упрощенный, с упором на проблему):

select     (CASE... END) as Case1,
           (CASE... END) as Case2,
           ...
           (CASE
                WHEN    ((select    count(*)
                        from        BOM
                        where       TRIM(MMCU)='MyPlant' and
                                    ITM=IB.ITM AND
                                    TBM IN ('M', 'ALT', 'AL2', 'AL3') AND
                                    (EFFF<=SYSDATE AND
                                    EFFT>=SYSDATE))>=1) THEN
                    CASE
                        WHEN IB.STKT='P' THEN
                            FOR parentItem IN   (select     distinct KIT
                                                from        BOM
                                               where       TRIM(MMCU)='MyPlant' AND
                                                            ITM=IB.ITM AND
                                                            TBM IN ('M', 'ALT', 'AL2', 'AL3') AND
                                                            (EFFF<=SYSDATE AND
                                                            EFFT>=SYSDATE)
                                                order by    KIT)
                            LOOP
                                dbms_output.put_line(parentItem)
                            END LOOP
                            CASE
                                WHEN IB.SAFE>0 THEN 1
                                ELSE 0
                            END
                        ELSE 1
                    END
                ELSE 1
            END) as CaseN,
            (CASE... END) as CaseX
from        MasterList IB
...

Запрос не выполняется на строке, с которой начинается FOR L OOP. Чего не хватает для работы l oop?

...