Seite 1 von 1

Trigger/Procedure Erstellung (Guthaben bei neuem Kunden, Hal

Verfasst: 26.05.2014 13:02
von wattestäbchen
Hallo,

ich schreibe demnächst eine Klausur und benötige ein paar Muster-Trigger/Procedures.
Zum einen möchte ich gerne eine Procedure erstellen, die zu Beginn "Hallo %Benutzername%" ausgibt.

Die "Hallo-Procedure" habe ich soweit geschrieben:

Code: Alles auswählen

CREATE PROCEDURE 'Hallo' (OUT 'isvalid' VARCHAR(80)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN SET isvalid = 'Hallo';
END
CALL 'Hallo'(
@p0
);
SELECT @p0 AS 'isvalid';
Ich weiß allerdings nicht, wie ich dort eine Variabel, die den Benutzernamen ausgibt, einfügen soll.

Des Weiteren benötige ich einen Trigger, der jedem neu angelegten Benutzer einen bestimmten Betrag zuweist. Habt ihr da eine Idee?

Code: Alles auswählen

CREATE TRIGGER `guthaben` BEFORE INSERT ON `kunde` FOR EACH ROW INSERT INTO `wetten`.`kunde` (`ID`, `vorname`, `name`, `guthaben`) VALUES (NULL, '', '', '5');
in dem Fall ein Guthaben von "5", aber ich denke so funktioniert das nicht.

Vielen Dank für Antworten!

Re: Trigger/Procedure Erstellung (Guthaben bei neuem Kunden,

Verfasst: 02.06.2014 16:50
von Miriam
Moin,


zum ersten Problem, könnte das ein Ansatz sein:

Code: Alles auswählen

DROP PROCEDURE IF EXISTS `hello_user` ;

CREATE DEFINER = `root`@`localhost` PROCEDURE `hello_user` ( IN `uname` VARCHAR( 32 ) ) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
BEGIN 
SELECT concat( 'Hello ', uname ) ;
END
Aufruf:

Code: Alles auswählen

 CALL `hello_user`('Miriam');
Ergebnis:

Code: Alles auswählen

Hello Miriam
Mußt natürlich vorher eine DB auswählen.

Zum 2. Problem: Da würde ich die Tabelle entsprechend formatieren, also daß der default Wert des Guthabens bei jedem immer 5 (Erdbeeren oder was auch immer) ist.

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `kunde` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `vorname` varchar(32) NOT NULL,
  `name` varchar(32) NOT NULL,
  `guthaben` float NOT NULL DEFAULT '5',
  PRIMARY KEY (`ID`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Dieser INSERT würde dann dem Kunden immer 5 (irgendwas zuordnen):

Code: Alles auswählen

INSERT INTO `kunde` ( `ID` , `vorname` , `name` ) VALUES (NULL , 'Miriam', 'Mustermann');
Aber wenn es denn nun ein Trigger sein muß:

Code: Alles auswählen

DROP TRIGGER IF EXISTS `ins_guthaben`;

CREATE TRIGGER `ins_guthaben` BEFORE INSERT ON `kunde` FOR EACH ROW BEGIN
IF NEW.name <> '' THEN
    SET NEW.guthaben = 5;
END IF;
END