2016-09-29 38 views
2
SET autocommit=0; 
DELIMITER$$ 
CREATE OR REPLACE PROCEDURE mytestproc() 
BEGIN 
    DECLARE `_rollback` BOOL DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; 
    START TRANSACTION; 
    INSERT INTO tbl_campo 
       (alias,nombre,descripcion,codigo_usuario, fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
       VALUES ('aliasxmp5','nombrexmp5','descxmp5',1, NOW(), NOW(), NULL); 
    REPLACE INTO tbl_campo_tabla_indicador_periodo 
       (codigo_campo,codigo_tabla_indicador_periodo,codigo_usuario, 
       fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
       VALUES (last_insert_id(),9,1, NOW(), NOW(), NULL); 
    IF `_rollback` THEN 
     ROLLBACK; 
    ELSE 
     COMMIT; 
    END IF; 
END$$ 

call mytestproc; 

的程序執行事務要執行這個交易我需要創建一個過程,接下來請它(mytestproc),我怎麼能修改此無需使用程序運行(CREATE PROCEDURE)只需從BEGIN運行到END?如何在沒有建立在MySQL

謝謝。

回答

0

請試試這個:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `mytestproc`; 

CREATE PROCEDURE `mytestproc`() 

BEGIN 
    DECLARE `_rollback` BOOL DEFAULT 0; 
    Declare autocommit int default 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; 
    START TRANSACTION; 
    INSERT INTO tbl_campo 
      (alias,nombre,descripcion,codigo_usuario, fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
      VALUES ('aliasxmp5','nombrexmp5','descxmp5',1, NOW(), NOW(), NULL); 
    REPLACE INTO tbl_campo_tabla_indicador_periodo 
      (codigo_campo,codigo_tabla_indicador_periodo,codigo_usuario, 
      fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
      VALUES (last_insert_id(),9,1, NOW(), NOW(), NULL); 
    IF `_rollback` THEN 
    ROLLBACK; 
    ELSE 
    COMMIT; 
    END IF; 
END