2017-04-06 272 views
-3

請幫助SQL ORA-00900:無效的SQL語句

IF EXISTS(SELECT * FROM MERC_ADM_VERSION)then UPDATE MERC_ADM_VERSION SET 
VER_VALEUR = 20150409 WHERE VER_CLE = 'MEAD' ELSE INSERT INTO MERC_ADM_VERSION 
('VER_VALEUR', 'VER_CLE') VALUES (20150409, 'MEAD'); 

ORA-00900:無效的SQL語句

+2

'IF'不是Oracle SQL的一部分;它是PL/SQL語法的一部分。也許你正在尋找「MERGE」聲明? –

+1

你從哪裏獲得Oracle SQL?查找書籍或參考Oracle SQL語句。 –

+0

試試這裏:https://livesql.oracle.com/apex/livesql/file/index.html –

回答

0

在insert語句刪除從列單引號。

而不是

('VER_VALEUR', 'VER_CLE') 

應該

(VER_VALEUR, VER_CLE) 
+0

它不起作用:(,thnks –

+0

這是存儲過程還是函數?IF是PL-SQL的一部分,你不能把它寫成正常的查詢。 – Sumit

+0

這是一個問題,但它不會導致ORA-00900錯誤。 –

0

你的問題是,什麼你正在嘗試做的還不是很清楚。但是,我最好的解釋是你正在尋找一個oracle合併聲明。下面是一個基於我對你所提供的信息做出的假設的例子。你很可能在尋找MERGE語句。這使您可以執行單個操作,可以根據您的條件更新或插入。

此外,您似乎使用日期,但數字格式。由於缺少任何表格定義,我沒有做任何處理。你可能仍然有問題。

MERGE 
INTO merc_adm_version TARGET -- The table you want to update/insert into 
USING (SELECT 20150409 as ver_valeur, 'MEAD' as ver_cle FROM dual) SOURCE -- The source of the data 
ON (TARGET.ver_cle = SOURCE.ver_cle) -- How to try and match records between source and target 
WHEN MATCHED THEN UPDATE SET ver_valeur = 20150409 -- When there is a match, how to update 
WHEN NOT MATCHED THEN INSERT (ver_cle, ver_valeur) -- When there is not a match, how to insert 
         VALUES ('MEAD', 20150409);