Jakieś pomysły, dlaczego następująca linia narzeka, że ​​DATEPART nie jest zdefiniowana jako identyfikator?

IF DATEPART(v_ExpireTime, year) = 1899 THEN v_ExpireTime := NULL;

Zwraca: Error(68,10): PLS-00201: identifier 'DATEPART' must be declared

EDYCJA: Nieważne, znalazłem odpowiedź. Teraz robię:

IF to_number(to_char(v_ExpireTime, 'YY')) = 1899 THEN v_ExpireTime := NULL;

-1
Skulmuk 28 sierpień 2012, 13:04

2 odpowiedzi

Najlepsza odpowiedź

Jak już odkryłeś, DATEPART jest funkcją SQL Server, a nie Oracle. Pokazana przez Ciebie alternatywa, to_number(to_char(v_ExpireTime, 'YY')), da Ci jednak dwucyfrową wartość, więc jeśli część roku Twojej daty to 1899, zwróci tylko 99, więc wygrałeś nie pasuje. Możesz użyć czterocyfrowego modelu daty roku YYYY zamiast YY.

Inną opcją jest użycie funkcji wyodrębniania:

IF extract(year from v_ExpireTime) = 1899 THEN ...
2
Alex Poole 28 sierpień 2012, 13:21

Jeśli mam rację, to dlatego, że DatePart nie jest częścią biblioteki PLSQL, więc nie wie, co robisz. Druga metoda dotyczy PLSQL.

1
TheMonkeyMan 28 sierpień 2012, 13:17