SQL Server To MySQL conversion script error surrounding UUID()? - mysql

ALTER TABLE aspnet_Paths ALTER PathId SET DEFAULT UUID();
I've ran a converter program on "generate" scripts from a SQL Server database.
I seem to be having uuid in the above statement highlighted in work benches query window with the statement "Error Syntax near uuid()",
I'm moving to MySQL. What's the correct implementation of this statement?
Any help/advise is much appreciated

Try to use a BEFORE INSERT trigger -
DELIMITER $$
CREATE TRIGGER trigger1
BEFORE INSERT
ON aspnet_paths
FOR EACH ROW
BEGIN
IF NEW.PathId IS NULL THEN
SET NEW.PathId = UUID();
END IF;
END
$$
DELIMITER ;

Related

How do I create a stored procedure in heidisql?

I'm trying to create a stored procedure in heidisql (mysql).
CREATE PROCEDURE SP_FORM20_POST(
P_SESSIONID VARCHAR(256)
)
BEGIN
INSERT INTO tbForm20
( SESSIONID, RegDT)
VALUES
( P_SESSIONID, NOW());
END
This is my query. I'm trying to create this procedure, but occur some error:
Error code is 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near'' at line 8".
However, I don't know wrong syntax. What is wrong?
I want to success in heidisql tool. I don't want other db tool.
Please help me.
The problem in that query is the semicolon, which is the default query delimiter.
In order to change the delimiter in HeidiSQL, add the DELIMITER client command above the CREATE PROCEDURE query:
DELIMITER \\
SELECT 1\\
CREATE PROCEDURE ...\\
DELIMITER ;
HeidiSQL also has a procedure designer, with no need to set the delimiter:
The problem is this. The database reads the ; in your code as an end of the procedure. You probably don't intend it like that :). The DELIMITER command takes care of that by changing ; to something customizable, like $$. Try this:
DELIMITER $$
CREATE PROCEDURE SP_FORM20_POST(
P_SESSIONID VARCHAR(256)
)
BEGIN
INSERT INTO tbForm20
( SESSIONID, RegDT)
VALUES
( P_SESSIONID, NOW());
END$$
DELIMITER ;
Try this one
DELIMITER //
CREATE PROCEDURE SP_FORM20_POST(
P_SESSIONID VARCHAR(256)
)
BEGIN
INSERT INTO tbForm20
( SESSIONID, RegDT)
VALUES
( P_SESSIONID, NOW());
END //
DELIMITER;

#1064 - You have an error in your SQL syntax; , SAMP MYSQL Error

I get this error on my PHPMyAdmin
#1064 - You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near '' at line 3
[EDIT]
Sorry, I didn't put the full thing before, i've already had an BEGIN and an END, Look.
CREATE TRIGGER `accounts_insert` BEFORE INSERT ON `accounts`
FOR EACH ROW BEGIN
SET new.RegiDate = now();
SET new.UpdateDate = now();
END;
This is the line ^^
If your trigger is only one instruction, you don't need the begin keyword:
create trigger `accounts_insert` before insert on `accounts`
for each row
set new.RegiDate = now();
If your trigger has multiple instructions, then you need to:
Change the default delimiter
Enclose the trigger instructions in a begin...end block
Restore the default delimiter
Example:
delimiter $$
create trigger `accounts_insert_2` before insert on `accounts`
for each row
begin
set new.RegiDate = now();
set #newRows = coalesce(#newRows, 0) + 1; -- Just a dummy example
end; &&
delimiter ;
Why the delimiter $$ and delimiter ; are important?
When you write a query, MySQL assumes that it ends where it finds the first standard "instruction terminator" (;). Since your trigger has more than one instruction, and every instruction must end with ;, then MySQL assumes that the trigger definition is ended, and (of course) fails to execute it. So, what can be done? Simply redefine temporally the standard instruction terminator:
delimiter $$
Now, each instruction must end with $$ to be executed. Define your trigger, and, when you want to end the definition, use your new temporary instruction terminator $$, and then redefine the terminator to the normal ;:
delimiter ;
This must be done every time you define a multi insstruction trigger or a stored procedure or function.

MySQL & trigger before insert

I need to create a trigger in my database.
The trigger must be able to analyse event before insert. In case of the last event already existing in the database has the same status, the trigger has to cancel the insert and update the last event.
I tried to create one but I can't add it in my database because of mysql errors:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
Here the trigger:
CREATE TRIGGER events_before_insert
BEFORE INSERT ON monitoringV2.events
FOR EACH ROW
BEGIN
DECLARE id_last_event;
DECLARE status_last_event;
SELECT id INTO id_last_event, status INTO status_last_event FROM events WHERE module_id=NEW.module_id ORDER BY serverDate DESC LIMIT 1;
IF NEW.status = status_last_event THEN
UPDATE events SET serverDate=NOW() WHERE id=id_last_event;
signal sqlstate '00000' set message_text = "Update instead of insert";
END IF;
END;
Here are information server:
PHP 5.4.6 VC9
Apache 2.4.2 VC9
MySQL 5.5.27
PhpMyAdmin 3.5.2.2
Thanks for your help
Regards,
Dorine M.
You will need to delimit your create statement:
delimiter //
CREATE...
...
END;
//
DELIMITER ;
and you will probably need to define a type for each variable declared, e.g.
DECLARE x INT;
You have to change DELIMITER before creating a trigger like this
DELIMITER $$
CREATE TRIGGER...
...
END;
$$
DELIMITER ;
You might not need to implement a trigger for this. The operation you are describing is formally known as UPSERT, i.e. update or insert.
This is how it's done in MySQL and you could also look at REPLACE.
Here is another question covering this.

mySQL stored procedure error

I am trying to use a if statement in my stored mySQL procedure, but when I try to create it in mySQL workbench I get this error ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database'.'table' WHERE date=dateIn;.
Here is the code:
DELIMITER $$
CREATE DEFINER=`rates_d_db` PROCEDURE `byDate`(in dateIn VARCHAR(255),in action VARCHAR(255))
BEGIN
IF action = "edit" THEN EDIT `database`.`table` WHERE date=dateIn;
ELSE SELECT * FROM `database`.`table` WHERE date=dateIn;
END IF;
END$$
I am new to stored procedures, so it's probably a very noob mistake.
Thanx in advance!
date is a reserved word in mySQL. You will have to wrap that in backticks as well.
Here is correct version of your procedure
DELIMITER $$
CREATE DEFINER=`rates_d_db` PROCEDURE `byDatee`(in dateIn VARCHAR(255),in action VARCHAR(255))
BEGIN
IF action = "edit" THEN
-- I used select below as i don't know what you want in edit either alter table or update table
SELECT * FROM `database`.`table` WHERE date=dateIn;
ELSE
SELECT * FROM `database`.`table` WHERE date=dateIn;
END IF;
END $$

MySQL Trigger ERROR in phpAdmin

Hi
Is there any error in this TRIGGER Statement.When ever i try to run this in phpAdmin its giving error saying "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "SELECT Count(*) into SIM_CCode_Count".I cant get what's wrong in this..please help me
This is my trigger statement
CREATE TRIGGER Is_CountryCode_There After INSERT on mr_details FOR EACH ROW
BEGIN
DECLARE SIM_CCode_Count INTEGER;
DECLARE NET_CCode_Count INTEGER;
SELECT Count(*) into SIM_CCode_Count FROM Country_Main where CountryCode=NEW.SimCntISO;
IF SIM_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.SIMCntISO,"Unknown");
END IF
If NEW.SimCntISO<>NEW.NetCntISO then
SELECT Count(*) into NET_CCode_Count FROM Country_Main
where CountryCode=NEW.NetCntISO
IF NET_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.NETCntISO,"Unknown");
END IF
END IF
END
Without proper explanation about your requirement and about tables and what you are expecting this trigger to do,its very difficult to say if any issues there in your trigger..
But as far as i can see there is some minor correction need to be done..
Try this Code and let know in detail your requirements..
CREATE TRIGGER Is_CountryCode_There After INSERT on mr_details FOR EACH ROW
BEGIN
DECLARE SIM_CCode_Count INTEGER;
DECLARE NET_CCode_Count INTEGER;
SELECT Count(*) into SIM_CCode_Count FROM Country_Main where CountryCode=NEW.SimCntISO;
IF SIM_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.SIMCntISO,"Unknown");
END IF;
If (NEW.SimCntISO<>NEW.NetCntISO) then
SELECT Count(*) into NET_CCode_Count FROM Country_Main
where CountryCode=NEW.NetCntISO;
IF NET_CCode_Count=0 THEN
INSERT INTO Country_Main(CountryCode,CountryName) Values(NEW.NETCntISO,"Unknown");
END IF;
End IF;
END;
You have to declare a mysql-statement delimiter before the trigger statement:
DELIMITER |
CREATE TRIGGER ...
(your code)
END|
DELIMITER ;
Otherwise MySQL interprets your ; in this statement as statement commit and executes the code immidiately. With the delimiter changed to a different character you can use the semicolon inside the trigger declaration safely.
See here: http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html