MYSQL Trigger insert or update different table - mysql

I've been wrapping my head around this SQL statement I'm trying to make and I've reached a wall so to speak, if you could lend any advise as to what I am doing wrong that would be a big help. I get the error around the 2nd where statement but I dont really expect the last part of the code to work yet.
CREATE TRIGGER UpdateScores
AFTER INSERT ON CharSheet FOR EACH ROW
begin
DECLARE id_exists Boolean;
SELECT
1
INTO
#id_exists
FROM
ScoresTable
WHERE
ScoresTable.PlayerID= NEW.PlayerID;
IF #id_exists = 1
THEN
UPDATE
ScoresTable
SET
Exp = :New.Exp;
WHERE
ScoresTable.PlayerID = :NEW.PlayerID;
END IF;
IF #id_exists = 0
THEN
-- I don't expect this part to work yet.
INSERT INTO ScoresTable VALUES (:New.PlayerID, :New.Race, :New.Class, :New.Exp);
END IF;
END;
$$

The problem is in this block of code:
THEN
UPDATE
ScoresTable
SET
Exp = :New.Exp;
WHERE
ScoresTable.PlayerID = :NEW.PlayerID;
END IF;
Remove the semicolon at the end of the set statement.

Related

Error in syntax of MySQL query, cannot figure it out

Here is my trigger:
DELIMITER //
CREATE TRIGGER trg_pic_hours
AFTER INSERT ON CREW
FOR EACH ROW
BEGIN
IF NEW.CREW_JOB = 'Pilot' THEN
UPDATE PILOT
SET PIL_PIC_HOURS = PIL_PIC_HOURS+(SELECT CHAR_HOURS_FLOWN FROM CHARTER
WHERE CHAR_TRP = NEW.CHAR_TRP)
WHERE EMP_NUM = NEW.EMP_NUM;
END IF;
END;
It errors out on NEW.CHAR_TRP but if I remove the NEW it processes but does not work correctly. Any idea why?

Trigger errors mysql

I want to make a trigger that prevent inserting overlaping dates. For example:
If I have an offer "Oferta" with the date from 1/3/2016 to 5/3/2016, I can't insert a new offer with the date 2/3/2016 to 4/3/2016 or 4/3/2016 to 7/3/2016
My SELECT checks that condition I believe. What I don't know how to do is to make an error if such happens. I'm new to triggers and Im having syntax errors, I checked triggers syntax but couldnt find the problem...
DELIMITER $$
CREATE TRIGGER tri_check_date_overlap BEFORE INSERT ON Oferta
FOR EACH ROW
BEGIN
IF EXISTS(
SELECT * FROM Oferta WHERE
(new.morada = morada AND new.codigo = codigo
AND ((new.data_inicio BETWEEN data_inicio AND data_fim)
OR new.data_fim BETWEEN data_inicio AND data_fim)
)
)
/*CALL raise_application_error(3001, 'Not odd number!'); */
DECLARE msg varchar(255);
set msg = concat('Error: That right is not allowed!', cast(new.right as char));
signal sqlstate '45000' set message_text = msg;
END $$
DELIMITER ;
Your logic is ok, I think you just missed the 'then' condition after 'if' and 'end if' before the end of the trigger.

What mistake I'm making while adding a new trigger on a MySQL table?

Following is the trigger I've written :
CREATE TRIGGER `test_BINS` BEFORE INSERT ON `phpfox_user` FOR EACH ROW
IF new.`full_name` = '' THEN SET new.`full_name` = NULL; END IF; END;
Following is the screen shot of the same:
Following is the image of error message that came :
Please somebody help me in adding this trigger.
DELIMITER $$
CREATE TRIGGER test_BINS BEFORE INSERT ON phpfox_user
FOR EACH ROW BEGIN
IF (NEW.full_name = '') THEN
SET NEW.full_name = NULL;
END IF;
END$$
DELIMITER ;
but if you want to add it using pma-interface, just place there this definition:
BEGIN
IF (NEW.full_name = '') THEN
SET NEW.full_name = NULL;
END IF;
END
The message is clear here. Whatever is present in the line 1 of your first image is not needed, as the information is already provided above.
Technically, your code tries to create a trigger inside another trigger. Remove the line 1 and it will be fine.
This should be the query:
FOR EACH ROW IF :new.full_name = '' THEN :new.full_name := NULL; END IF; END;

Unable to execute "IF EXISTS" query

I am trying to run a SQL query, but something is messed up and I can't get below query to check if the data exists or not in the specified table.
The code I have is:
IF EXISTS(SELECT brth_day FROM sms.birthdaycheck WHERE brth_day = '2015-02-10')
THEN
BEGIN
UPDATE sms.birthdaycheck SET cnt = 1 WHERE brth_day = '2015-02-10'
END
ELSE
BEGIN
INSERT INTO sms.birthdaycheck(cnt,brth_day) VALUES (1,'2015-02-10')
END
END IF;
Edited solution :
delimiter ;;
create procedure XYZ(...parameters...)
begin
if exists(
SELECT brth_day FROM sms.birthdaycheck WHERE brth_day = '2015-
02-10')
then
UPDATE sms.birthdaycheck SET cnt = 1 WHERE brth_day = '2015-02-10';
else
INSERT INTO sms.birthdaycheck(cnt,brth_day) VALUES (1,'2015-02-10');
end if;
end;;
In MySQL, if control block must used inside a function or stored procedure.
So you need to rewrite your query:

Error with Trigger in MySQL

I'm trying to write a trigger with mysql but it gives me several error. The last one has no description (MySQL says only Error!) and so i'm here to ask for your help
delimiter |
CREATE TRIGGER SellStockTrigger
AFTER INSERT ON UtenteHaAzione
FOR EACH ROW
BEGIN
DECLARE BUD DOUBLE;
DECLARE SOMMA DOUBLE;
SET BUD=(SELECT BUDGET
FROM UTENTE
WHERE CODUTENTE = NEW.CODUTENTE);
SET SOMMA= NEW.COSTOAZIONE*NEW.QTAAZIONE;
SET BUD=BUD-SOMMA;
IF (BUD<0)
raise_application_error (6002, 'budget exceeded');
ELSE
UPDATE UTENTE
WHERE CODUTENTE=NEW.CODUTENTE
SET BUDGET=BUD;
END IF;
END;
delimiter ;
This is my database structure.
Utente_Table
UtenteHaAzione_Table
Unfortunately i used to write trigger in Oracle Databases, so i'm sure that i'm missing something!
Thanks for your help
2 things -
First after the end you need the delim something as
END; |
delimiter ;
Next the update query is wrong and should be as
UPDATE UTENTE
SET BUDGET=BUD
WHERE CODUTENTE=NEW.CODUTENTE
;