sql >> Database >  >> RDS >> Mysql

MYSQL If-instructie in transactie die fout veroorzaakt

MySQL herkent geen instructie die begint met het trefwoord IF als een geldige SQL-instructie.

De IF instructie werkt alleen in de context van een samengestelde instructie (dat wil zeggen, een blok met instructies tussen BEGIN en END . Momenteel wordt de samengestelde instructie alleen ondersteund in de context van een opgeslagen programma (opgeslagen procedure, functie of trigger.)

http://dev.mysql.com/doc/refman /5.5/nl/begin-end.html

Probeer voor het testen...

DELIMITER //

CREATE PROCEDURE usp_test_transaction()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
  START TRANSACTION;

  -- whatever DML operations and SELECT statements you want to perform go here

  IF (1=1) THEN
    COMMIT;
  ELSE
    ROLLBACK;
  END IF;
END//

DELIMITER ;

CALL usp_test_transaction;

(OPMERKING:ik pleit er hier niet voor dat transacties binnen de opgeslagen procedure worden afgehandeld. Mijn persoonlijke voorkeur is om dit NIET te doen, en in plaats daarvan transacties op een hoger niveau af te handelen. Maar het bovenstaande voorbeeld zou moeten werken; ik geloof dat MySQL het bellen START TRANSACTIE ondersteunt , COMMIT en ROLLBACK binnen de context van een opgeslagen procedure.)




  1. UPPER() Functie in Oracle

  2. Wat heb ik nodig om te ontsnappen bij het verzenden van een vraag?

  3. ORA-02287:volgnummer is hier niet toegestaan

  4. Hoe de REGEXP_SUBSTR()-functie werkt in MySQL