Wpis z mikrobloga

Od wersji Oracle DB 12c w SQL w konstrukcji WITH deklarować można funkcje do wykorzystania we właściwym zapytaniu.
I teraz tak. Mam zadeklarowaną taką funkcję. Bardzo prostą. Przyjmuje argument VARCHAR2, który umownie jest datą w formacie YYYY-MM-DD a sam kod to 1 (słownie jedna) linia:

RETURN TRUNC(TO_DATE(p_data, 'YYYY-MM-DD'), 'MM');
Nie ma żadnych dwukropków.

Właściwe zapytanie ma jakiś śmieszny, pomijalny koszt rzędu 50 tych bliżej nieokreślonych jednostek i z 500 bajtów. Zapytanie nawet nie korzysta z ww. funkcji. Po odpaleniu w TOAD kilkanaście sekund mieli, a później błąd "Koniec pliku w kanale komunikacyjnym" i killuje mi sesję. Po wywaleniu WITH z funkcją (przypominam, że funkcja nie użyta nawet) zapytanie działa normalnie i zwraca wyniki w mniej niż 200ms.

W innym SQL to sama funkcja (kopiuj wklej) działa. Już któryś raz mam taki problem i nie wiem gdzie szukać przyczyny.

Czy ktoś z was spotkał się z tym problemem?

#oracle #plsql #sql
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@TomaszWKS: wygląda na jakiś internal error w tle, sprawdź wpisy w alert logu.
Może Toad ma jakieś ustawienia sesji które powodują problem, może spróbuj jeszcze:
alter session set query_rewrite_enabled = false;
  • Odpowiedz