没有活跃交易

问题描述 投票:0回答:1

我想调用一个存储过程,在 Laravel 的事务中创建动态视图:

拉拉维尔:

try {
    DB::transaction(function() use ($raison_sociale_clean, $coming) {          
        DB::statement('CALL ps_creer_view_des_produits_fournisseur_supp(?,?)',[substr($raison_sociale_clean,0,30),$coming->id]);
        
        DB::table('produits')->where('fournisseurs_id','=',$coming->id)->delete();
        DB::table('fournisseurs')->whereid($coming->id)->delete();
    });
    
    echo 'Transaction passée sans erreurs';
} catch(QueryException $e) {
    echo "Error dans la requête: " . $e->getMessage();
}

MySQL:

DELIMITER //
CREATE PROCEDURE IF NOT EXISTS ps_creer_view_des_produits_fournisseur_supp(IN nom_view varchar(30), IN id_fournisseur int)
BEGIN
    DECLARE query varchar(1000);
    set query = concat('CREATE VIEW supp_fournisseur_', nom_view, '_prod AS
    SELECT p.id as produit_id, p.designation, p.prix, p.date_expiration, f.id as fournisseurs_id, f.raison_sociale, f.adresse, f.tele
    FROM produits p
    INNER JOIN fournisseurs f
    ON p.fournisseurs_id=f.id
    WHERE fournisseurs_id=', id_fournisseur);
    PREPARE view_supp from query;
    EXECUTE view_supp;
    DEALLOCATE PREPARE view_supp;
END //
DELIMITER ;

当我删除包含存储过程的语句时,事务进行得很顺利,所以问题就出在其中。需要注意的是,视图已成功创建,并且已删除给定的服务人员和产品记录。尽管如此,总是弹出“没有活动交易”的错误消息。

我搜索了一下,发现问题可能出在自动提交上,就像存储过程本身进行了提交一样,那么当事务尝试进行提交或回滚时,它将被视为未知事务的新提交。

mysql laravel stored-procedures transactions
1个回答
0
投票

MySQL 不支持事务内的 DDL(例如创建视图)。创建视图将“隐式提交”事务,下一个 DML 语句将是一个新事务。在交易之前创建视图。

© www.soinside.com 2019 - 2024. All rights reserved.