2016-11-16 110 views
0
UPDATE AC01_FILE_BLOB 
SET AC01_FILE_BLOB.DATA_CONTROLLO=(TO_DATE(SELECT TO_CHAR(SYSDATE, 
                'yyyy/mm/dd hh24:mi:ss') 
               FROM DUAL)) 
WHERE AC01_FILE_BLOB.DATA_CONTROLLO = (SELECT DATA_CONTROLLO 
             FROM AC01_FILE_BLOB 
             WHERE ROWNUM = 1 
            ORDER BY DATA_CONTROLLO desc) 

[錯誤代碼:936,SQL狀態:42000] ORA-00936這個查詢有什麼問題?

+0

該錯誤代碼似乎意味着缺少右括號,但由於我沒有看到你發佈的查詢中,我會假設要麼a)你沒有發佈導致此錯誤的實際查詢,或b)某事在你的查詢中如此錯誤以至於甲骨文在這個錯誤中翻滾並死亡。 –

+0

從頂級子查詢中不允許在where子句中的子查詢中刪除order by子句。 –

+1

@Dario你的更新語句中有很多內容沒有意義。首先:爲什麼從雙重選擇sysdate時可以簡單地使用sysdate?例如'set data_controllo = to_char(sysdate,'mm-dd-yyyy hh24:mi:ss')''。接下來,爲什麼你在DATA_CONTROLLO字段中存儲不同的東西? HASH_FILE似乎是一個非常不同於日期的字符串。 – Boneist

回答

1

這就是解決方案:

UPDATE AC01_FILE_BLOB 
SET AC01_FILE_BLOB.DATA_CONTROLLO = (SYSDATE) 
WHERE AC01_FILE_BLOB.DATA_CONTROLLO = (SELECT max(DATA_CONTROLLO) 
FROM AC01_FILE_BLOB where ROWNUM = 1); 

的問題是關於SYSDATE值,當我必須插入一條記錄,我必須指定日期格式和值,而不是在SYSDATE中。 再加上「order by」命令沒用,因爲我必須使用max(DATA_CONTROLLO),這就是問題[已解決]關於我必須確定更新日期是MAX的問題,謝謝大家!

+0

您不需要sysdate附近的括號,也不需要子查詢中的'rownum = 1';當您在整個表上執行聚合函數時,您只會返回一行。 – Boneist

+0

所以我應該改變: 從AC01_FILE_BLOB其中ROWNUM = 1); in FROM AC01_FILE_BLOB; ? 我理解正確嗎? – Dario

+0

你可以這樣做:'update ac01_file_blob set data_controllo = sysdate where data_controllo =(從ac01_file_blob選擇max(data_controllo));' – Boneist