基本的に、プッシュアップ、プルアップ、および 3 マイルのランニングのスコアを追加して、300challenge テーブルのスコアを更新するトリガーを作成しようとしました。3 マイル ランのスコアは、下の大きな部分にSELECT
あります。
create trigger update_wscore
AFTER INSERT
ON 300challenge FOR EACH ROW
Create table temp(3mile_score integer);
insert into temp(3mile_score)
select
case
WHEN TIMEDIFF (3mile , '00:18:00') > '00:00:10'
THEN
CASE
WHEN
100 - (EXTRACT(MINUTE FROM TIMEDIFF (3mile, '00:18:00')) * 6 +
FLOOR(EXTRACT(SECOND FROM TIMEDIFF (3mile, '00:18:00')) / 10)) < 0
THEN 0
ELSE
100 - (EXTRACT(MINUTE FROM TIMEDIFF (3mile, '00:18:00')) * 6 +
FLOOR(EXTRACT(SECOND FROM TIMEDIFF (3mile, '00:18:00')) / 10))
END
ELSE 100
END
FROM 300challenge
WHERE wscore IS NULL;
UPDATE 300challenge
SET wscore = pushups * 2 + pullups * 5 + (select * from temp);
drop table temp;
をステートメントでSELECT
直接使用しようとしましたが、ステートメント内の句でテーブルを使用できないと言ってうまくいきませんでした。UPDATE wscore
select * fom temp
300challenge
SELECT FROM
UPDATE
その後、現在上に表示されているものを試して、スコアをダンプする一時テーブルを作成し、スコアで使用するためにそれを読み取りましたUPDATE
。
しかし、明らかに、この方法はシステムをだますのに十分ではなく、次のエラーがスローされるようになりました。Explicit or implicit commit is not allowed in stored function or trigger.
アイデアが尽きてしまったので、何か提案があれば大歓迎です。
アップデート:
また、トリガーから を削除しCREATE TABLE TEMP
、トリガーの外側にテーブルを作成し (1 回)、トリガーの最後の行を に置き換えてみましdrop table temp
たtruncate table temp
が、明らかに私の Web ホストはトリガーを許可していません。
TRIGGER command denied to user '--'@'localhost' for table '300challenge'
私のコードは今これです
CREATE TABLE TEMP (3mile_score INT);
CREATE TRIGGER update_wscore
AFTER INSERT ON 300 challenge
FOR EACH ROW
INSERT INTO TEMP (3mile_score)
SELECT CASE
WHEN TIMEDIFF(3mile, '00:18:00') > '00:00:10'
THEN CASE
WHEN 100 - (EXTRACT(MINUTE FROM TIMEDIFF(3mile, '00:18:00')) * 6 +
FLOOR(EXTRACT(SECOND FROM TIMEDIFF(3mile, '00:18:00')) / 10)) < 0
THEN 0
ELSE 100 - (EXTRACT(MINUTE FROM TIMEDIFF(3mile, '00:18:00')) * 6 +
FLOOR(EXTRACT(SECOND FROM TIMEDIFF(3mile, '00:18:00')) / 10))
END
ELSE 100
END
FROM 300 challenge
WHERE wscore IS NULL;
UPDATE 300 challenge
SET wscore = pushups * 2 + pullups * 5 + (
SELECT *
FROM TEMP
);
TRUNCATE TABLE TEMP;