Vaše použití funkce add_months() je nesprávné. Nejsou to dvě slova, je to jen jedno (s podtržítkem)
add_months(datesold, 1)
poznamenejte si podtržítko _
mezi ADD
a MONTHS
. Je to volání funkce, nikoli operátor.
Případně můžete použít:
datesold + INTERVAL '1' month
I když stojí za zmínku, že aritmetika s intervaly je omezená (pokud není porušena), protože jednoduše "zvyšuje" hodnotu měsíce hodnoty data. To může vést k neplatným datům (např. od ledna do února). Ačkoli se jedná o zdokumentované chování (viz níže uvedené odkazy), považuji to za chybu (standard SQL vyžaduje, aby tyto operace „Aritmetika dodržovala přirozená pravidla spojená s daty a časy a poskytovala platné výsledky data a času nebo intervalu podle gregoriánského kalendáře ")
Podrobnosti naleznete v příručce:
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
Další věc:
Proč tedy používáte INSERT
tvrzení? Chcete-li změnit data existujících řádků, měli byste použít UPDATE
. Zdá se tedy, že to, co ve skutečnosti hledáte, je něco takového:
update auctions
set datesold = add_months(datesold, 1)
where item = 'Radio';