sql >> Databáze >  >> RDS >> Mysql

SPOUŠTĚČE, které způsobují selhání INSERTů? Možný?

Z tohoto příspěvek na blogu

Spouštěče MySQL:Jak zrušíte INSERT, UPDATE nebo DELETE pomocí spouštěče? Na #mysql EfNet se někdo zeptal:

Jak zajistím, aby spouštěč přerušil operaci, pokud moje obchodní pravidlo selže?

V MySQL 5.0 a 5.1 se musíte uchýlit k nějakému triku, aby spouštěč selhal a vydal smysluplnou chybovou zprávu. MySQL StoredProcedure FAQ říká o chybovém zpracování toto:

SP 11. Mají poskytovatelé služeb prohlášení „navýšení“ pro „zvýšení chyb aplikace“? Promiň, momentálně ne. Standardní příkazy SQL SIGNAL a RESIGNAL jsou v TODO.

Možná, že MySQL 5.2 bude obsahovat prohlášení SIGNAL, díky kterému bude toto nabourání přímo z MySQL StoredProcedure Programming zastaralé. Jaký je hack? Donutíte MySQL, aby se pokusilo použít sloupec, který neexistuje. Škaredý? Ano. Funguje to? Jistě.

CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;


  1. předat celočíselné pole do procedury Oracle pomocí c#

  2. Výběrový dotaz s limitem posunu je příliš pomalý

  3. Předat hodnoty načtené ze souboru jako vstup do SQL dotazu v Oracle

  4. Jak najít řazení v MySQL