2016-11-16 113 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