1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

MySQL Stored Procedure mit Transaktion

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von jmar83, 28 November 2018.

  1. jmar83

    jmar83 Datenbank-Guru

    Hallo zusammen

    Es geht weder

    Code:
    USE relay;
    
    DROP PROCEDURE IF EXISTS spex_delete_node;
    
    DELIMITER ||
    CREATE DEFINER=`root`@`localhost` PROCEDURE `call spex_delete_node`(IN `_id` INT)
    proc_label:BEGIN
    
    START TRANSACTION;
    
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
        BEGIN
            ROLLBACK;
            EXIT PROCEDURE;
        END;
    
        DELETE FROM `device_location` WHERE `location_id`=_id;
        DELETE FROM `vswitch_location` WHERE `location_id`=_id;
        DELETE FROM `rights_level_permission` WHERE `location_id`=_id;
        DELETE FROM `location` WHERE `location_id`=_id;
        DELETE FROM `shared_things` WHERE `things_type`= 1  AND  `things_id`=_id OR `things_type`= 2  AND  `things_id`=_id;
        COMMIT;
    
    END;
    ||
    DELIMITER ;
    noch

    Code:
    USE relay;
    
    DROP PROCEDURE IF EXISTS spex_delete_node;
    
    DELIMITER ||
    CREATE DEFINER=`root`@`localhost` PROCEDURE `call spex_delete_node`(IN `_id` INT)
    proc_label:BEGIN
    
    START TRANSACTION;
        DELETE FROM `device_location` WHERE `location_id`=_id;
        DELETE FROM `vswitch_location` WHERE `location_id`=_id;
        DELETE FROM `rights_level_permission` WHERE `location_id`=_id;
        DELETE FROM `location` WHERE `location_id`=_id;
        DELETE FROM `shared_things` WHERE `things_type`= 1  AND  `things_id`=_id OR `things_type`= 2  AND  `things_id`=_id;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
        BEGIN
            ROLLBACK;
            EXIT PROCEDURE;
        END;
    
    
        COMMIT;
    
    END;
    ||
    DELIMITER ;
    Das Tool, mit dem ich die SP versuche reinzuladen ist "HeidiSQL".

    MySQL : transaction within a stored procedure

    Danke für die Feedbacks.
     
  2. jmar83

    jmar83 Datenbank-Guru

    Nachtrag: MySQL Fehlercode: 1064
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Syntaxfehler. Ich nix MySQL. Bist Du sicher, daß man ein Label vor BEGIn setzen kann?
     
  4. jmar83

    jmar83 Datenbank-Guru

    Vielen Dank fürs Feedback. Der "Exit Handler" muss oben sein, das war das Problem.
     
  5. jmar83

    jmar83 Datenbank-Guru

    Noch ne Frage, falls das jemand weiss: Für was ist "EXIT PROCEDURE;" innerhalb des Rollbacks? Muss das explizit so dastehen?
    Danke für die Feedbacks.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden