Din användning av add_months()-funktionen är felaktig. Det är inte två ord, det är bara ett (med ett understreck)
add_months(datesold, 1)
notera understrecket _
mellan ADD
och MONTHS
. Det är funktionsanrop inte en operatör.
Alternativt kan du använda:
datesold + INTERVAL '1' month
Även om det är värt att notera att aritmetiken med intervall är begränsad (om den inte är bruten) eftersom den helt enkelt "ökar upp" månadsvärdet för datumvärdet. Det kan leda till ogiltiga datum (t.ex. från januari till februari). Även om detta är dokumenterat beteende (se länkarna nedan) anser jag att detta är en bugg (SQL-standarden kräver att dessa operationer "Aritmetik följer de naturliga reglerna som är associerade med datum och tider och ger giltiga datum- och intervallresultat enligt den gregorianska kalendern ")
Se manualen för detaljer:
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
En annan sak:
Varför använder du då en INSERT
påstående? För att ändra data för befintliga rader bör du använda UPDATE
. Så det verkar som det du verkligen är ute efter är något sånt här:
update auctions
set datesold = add_months(datesold, 1)
where item = 'Radio';