Twoje użycie funkcji add_months() jest nieprawidłowe. To nie dwa słowa, to tylko jedno (z podkreśleniem)
add_months(datesold, 1)
zwróć uwagę na podkreślenie _
między ADD
i MONTHS
. To wywołanie funkcji, a nie operator.
Alternatywnie możesz użyć:
datesold + INTERVAL '1' month
Chociaż warto zauważyć, że arytmetyka z interwałami jest ograniczona (jeśli nie złamana), ponieważ po prostu „zwiększa” wartość miesiąca wartości daty. Może to prowadzić do nieprawidłowych dat (np. od stycznia do lutego). Chociaż jest to udokumentowane zachowanie (patrz poniższe linki), uważam to za błąd (standard SQL wymaga, aby te operacje "Arytmetyka przestrzegała naturalnych reguł związanych z datami i godzinami i dawała prawidłowe wyniki daty i czasu lub przedziału zgodnie z kalendarzem gregoriańskim ")
Szczegóły znajdziesz w instrukcji:
http ://docs.oracle.com/cd/E11882_01/server.112/e26088/functions011.htm#i76717
http://docs.oracle .com/cd/E11882_01/server.112/e26088/sql_elements001.htm#i48042
Kolejna rzecz:
Więc dlaczego używasz INSERT
? oświadczenie? Aby zmienić dane istniejących wierszy, użyj UPDATE
. Wygląda więc na to, że naprawdę szukasz czegoś takiego:
update auctions
set datesold = add_months(datesold, 1)
where item = 'Radio';