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

エラーコードは右括弧がないことを意味するように見えますが、私があなたが投稿したクエリでは表示されないので、このエラーの原因となった実際のクエリを投稿しなかったか、あなたの問合せでは、Oracleがロールオーバーしてこのエラーが発生して死にそうに間違っています。 –

+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)を使用する必要がありました。問題は解決しました。

+0

sysdateの括弧は不要で、サブクエリに 'rownum = 1'も必要ありません。テーブル全体で集計関数を実行すると、1つの行しか戻されません。 – Boneist

+0

だから私は変更する必要があります: FROM 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

関連する問題