2016-03-24 7 views
1

動作しない私はELMAHテーブルのエラーを格納するために、このストアドプロシージャがあります。このDELETE文は

CREATE DEFINER=`b4d7eb33be6399`@`%` PROCEDURE `elmah_LogError`(
    IN ErrorId CHAR(36), 
    IN Application varchar(60), 
    IN Host VARCHAR(30), 
    IN Type VARCHAR(100), 
    IN Source VARCHAR(60), 
    IN Message VARCHAR(500), 
    IN User VARCHAR(50), 
    IN AllXml TEXT, 
    IN StatusCode INT(10), 
    IN TimeUtc DATETIME 
) 
    MODIFIES SQL DATA 
BEGIN 

    INSERT INTO `elmah_error` (
     `ErrorId`, 
     `Application`, 
     `Host`, 
     `Type`, 
     `Source`, 
     `Message`, 
     `User`, 
     `AllXml`, 
     `StatusCode`, 
     `TimeUtc` 
    ) VALUES (
     ErrorId, 
     Application, 
     Host, 
     Type, 
     Source, 
     Message, 
     User, 
     AllXml, 
     StatusCode, 
     TimeUtc 
    ); 

DELETE FROM `elmah_error` WHERE ErrorId NOT IN ( 
    SELECT ErrorId 
    FROM ( 
    SELECT ErrorId 
    FROM `elmah_error` 
    ORDER BY TimeUtc DESC 
    LIMIT 100 
) x 
); 

END 

を私は100件の最後のレコードを維持するためにDELETE部分を追加しました。問題は何もしないということです。しかし、このDELETEコードを単独で使用してMySql Workbenchのクエリウィンドウで実行すると、100を保存した後にレコードが正しく削除されます。奇妙な?カラム名に

+0

わかりませんが、 'ErrorId'(例えば)はストアドプロシージャスコープの変数として扱われませんか?したがって、DELETE文は 'DELETE ... WHERE 1244 NOT IN ... 'になります。間違っています。あなたがそれらをバックティックに入れれば、うまくいくでしょう。同じですTimeUtc – mitkosoft

答えて

0

プットバッククォート:

DELETE FROM `elmah_error` WHERE `ErrorId` NOT IN ( 
    SELECT `ErrorId` 
    FROM ( 
    SELECT `ErrorId` 
    FROM `elmah_error` 
    ORDER BY `TimeUtc` DESC 
    LIMIT 100 
) x 
); 

彼らは、プロシージャ本体内(なぜなら同じ名前の)変数としてthreatedさOtherwhise。

+0

ありがとうございます。すべてのbackticksを追加しました。まだ動作しません。 –

+0

各クエリの後に 'COMMIT'を置くのはどうですか? – mitkosoft

+0

まだ変更はありません。 –

0

私はx日より古いレコードを削除しようとしていたのと同様の問題がありました(そこにあるすべての例のように)。問題はTimeUtcもパラメータだったので、私はテーブルを参照する必要があった:WHERE elmah_errorTimeUtc <(NOW() - INTERVAL 3 MONTH);

おそらくErrorIdと同じ問題です。

+0

ありがとうございます。私はこれを行い、それは何も変えなかった。 –