Triggers in MySQL

Status
Niet open voor verdere reacties.

Mariah1st

Nieuwe gebruiker
Lid geworden
21 dec 2009
Berichten
4
Hoe moeilijk kan het zijn als je het boek gewoon volgt :shocked:

Twee simpele tabellen, na het invoeren in 1 tabel moet er een record in een andere tabel gezet worden:
[sql]
CREATE TABLE IF NOT EXISTS `md31350db105336`.`tblRefStaffRoles` (
`fldStaffRoleCode` VARCHAR(45) NOT NULL ,
`fldStaffRoleDescription` VARCHAR(45) NULL ,
`fldCreationDate` TIMESTAMP NULL ,
`fldChangeDate` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`fldStaffRoleCode`) )
ENGINE = InnoDB

CREATE TABLE IF NOT EXISTS `md31350db105336`.`tblAudit` (
`fldSequence` INT NOT NULL ,
`fldTimeStamp` TIMESTAMP NOT NULL ,
`fldUserID` VARCHAR(45) NOT NULL DEFAULT 'CURRENT_USER' ,
`fldChangeType` VARCHAR(24) NOT NULL ,
`fldChange` VARCHAR(450) NOT NULL ,
PRIMARY KEY (`fldSequence`) ,
INDEX `ndxUSer` (`fldUserID` ASC) )
ENGINE = InnoDB
[/sql]
Dus men neemt een trigger :evil: volgens het boek :evil:
[sql]
CREATE TRIGGER RefStaffRoles_after_ins_tr
AFTER INSERT ON `tblRefStaffRoles`
FOR EACH ROW
BEGIN
INSERT INTO `md31350db105336`.` 'tblAudit'
(`fldSequence`, `fldTimeStamp`, `fldUserID`, `fldChangeType`, `fldChange`)
VALUES
(0,CURRENT_TIMESTAMP,CURRENT_USER,'INSERT', 'TEST' )
END
;
[/sql]
Noem een errorcode en ik heb 'm gezien..... maar geen insert.
WWWaarschijnlijk kijk ik er gewoon overheen??

HELP??
 
Laatst bewerkt door een moderator:
Hallo Mariah1st,

Volgens mij ben je ; vergeten na (0,CURRENT_TIMESTAMP,CURRENT_USER,'INSERT', 'TEST' )

Groetjes Erik Rothuis
 
Erik

Was het leven maar zo gemakkelijk.... werkt ook niet...

Het voorbeeld is 1-op- 1 uit het boek overgnomen

grz
 
In de insert is iets mis gegaan met de quotes en backticks, bij tabelnamen moet je altijd de backtick gebruiken (of helemaal geen quotes werkt ook):[sql]INSERT INTO `md31350db105336`.`tblAudit`[/sql]
De opmerking van roto klopt ook, er moet wel een puntkomma na het insert statement, maar er moet nog iets bij. Normaal gesproken wordt de puntkomma als einde van de query gezien en kan deze uitgevoerd worden. In dit geval wil je dat niet en kun je dit aanpassen via het commando 'delimiter'. Ik hoop dat het een beetje te volgen is. Maar voor het geval dat niet zo is, het statement om de trigger aan te maken komt er dan zo uit te zien:[sql]DELIMITER //

CREATE TRIGGER RefStaffRoles_after_ins_tr
AFTER INSERT ON `tblRefStaffRoles`
FOR EACH ROW
BEGIN
INSERT INTO `md31350db105336`.`tblAudit`
(`fldSequence`, `fldTimeStamp`, `fldUserID`, `fldChangeType`, `fldChange`)
VALUES
(0,CURRENT_TIMESTAMP,CURRENT_USER,'INSERT', 'TEST' );
END
//

DELIMITER ;[/sql]Mocht je er niet uit komen, laat het weten ;).
 
Laatst bewerkt:
Het delimiter commando had ik ook reeds gevonden, maar de backticks had ik ook niet gezien. Was wel weer een leuk puzzeltje :D

Groetjes Erik Rothuis
 
Gelukt!:) .

Is inderdaad een kwestie van delimeters etc

En nog bedankt! Nu nog even uitzoeken waarom niet alle triggers aangemaakt worden bij forward eningeering....
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan