CTE w Firebird

Odpowiedz Nowy wątek
2015-02-03 14:05
0

Witajcie!
Napisałem rekurencję za pomocą metody CTE. Wszytko byłoby dobrze gdyby nie komunikat, którego nie potrafię przeskoczyć. Chodzi bowiem o jakieś chyba zapętlenie, jednak nigdzie nie mogę dostać odpowiedzi dlaczego jest błąd. Poniżej kod błędu i sama rekurencja

can't format message 13:896 -- message file C:\Windows\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
CTE 'EMPTY' has cyclic dependencies.
   WITH empty as (SELECT T2.ID_TECHNOLOGIA, K2.NAZWASKR FROM NAGL N
    LEFT OUTER JOIN POZ P ON (P.ID_NAGL = N.ID_NAGL)
    LEFT OUTER JOIN KARTOTEKA K ON (K.ID_KARTOTEKA = P.ID_KARTOTEKA)
    LEFT OUTER JOIN TECHNOLOGIA T ON (T.ID_KARTOTEKA = P.ID_KARTOTEKA)
    LEFT OUTER JOIN OPERACJATECH O ON (O.ID_TECHNOLOGIA = T.ID_TECHNOLOGIA)
    LEFT OUTER JOIN OPERACJASL OS ON (OS.id_operacjasl= O.id_operacjasl)
    LEFT OUTER JOIN OPERACJA OP ON (OP.id_operacjatech = O.id_operacjatech)
    LEFT OUTER JOIN bomitemoperacjatech_view V ON (V.id_operacjatech = O.id_operacjatech)
    LEFT OUTER JOIN KARTOTEKA K2 ON (K2.ID_KARTOTEKA = V.ID_KARTOTEKA)
    LEFT OUTER JOIN TECHNOLOGIA T2 ON (T2.ID_KARTOTEKA = K2.ID_KARTOTEKA)
    WHERE  N.ID_NAGL = 10869 AND T2.ID_TECHNOLOGIA IS NULL AND T.GLOWNA = 1 and n.id_defdok = 910
    UNION ALL
    SELECT T2.ID_TECHNOLOGIA, K2.NAZWASKR FROM NAGL N
    LEFT OUTER JOIN POZ P ON (P.ID_NAGL = N.ID_NAGL)
    LEFT OUTER JOIN KARTOTEKA K ON (K.ID_KARTOTEKA = P.ID_KARTOTEKA)
    LEFT OUTER JOIN TECHNOLOGIA T ON (T.ID_KARTOTEKA = P.ID_KARTOTEKA)
    LEFT OUTER JOIN OPERACJATECH O ON (O.ID_TECHNOLOGIA = T.ID_TECHNOLOGIA)
    LEFT OUTER JOIN OPERACJASL OS ON (OS.id_operacjasl= O.id_operacjasl)
    LEFT OUTER JOIN OPERACJA OP ON (OP.id_operacjatech = O.id_operacjatech)
    LEFT OUTER JOIN bomitemoperacjatech_view V ON (V.id_operacjatech = O.id_operacjatech)
    LEFT OUTER JOIN KARTOTEKA K2 ON (K2.ID_KARTOTEKA = V.ID_KARTOTEKA)
    LEFT OUTER JOIN TECHNOLOGIA T2 ON (T2.ID_KARTOTEKA = K2.ID_KARTOTEKA)
    INNER JOIN empty Pp on T2.ID_TECHNOLOGIA = PP.ID_TECHNOLOGIA)
    SELECT * FROM empty
edytowany 1x, ostatnio: PoczatkujacyCoder, 2015-02-03 14:05

Pozostało 580 znaków

2015-02-03 15:51
0

Ta linijka

INNER JOIN empty Pp ON T2.ID_TECHNOLOGIA = PP.ID_TECHNOLOGIA

powoduje, że zapętlasz się na rekordzie określonym tutaj:

WHERE  N.ID_NAGL = 10869 AND T2.ID_TECHNOLOGIA IS NULL AND T.GLOWNA = 1 AND n.id_defdok = 910

"There are people who actually like programming. I don't understand why they like programming."
Rasmus Lerdorf

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0