代码之家  ›  专栏  ›  技术社区  ›  TenG

Mariadb等于Oracle每当出现sqlError时

  •  0
  • TenG  · 技术社区  · 6 年前

    在Oracle的sqlplus中,编写脚本时可以使用 WHENEVER SQLERROR 检测/处理错误。

    例如

    sqlplus /nolog -S <<EOF
    
    WHENEVER SQLERROR EXIT FAILURE ROLLBACK
    
    CONNECT /
    
    EXEC ThisProcThrowsAnError();
    
    QUIT
    
    EOF
    
    if [ ${?} -eq 0 ]
    then
       echo "Worked OK"
    else
       echo "Oh dear"
    fi
    

    马里亚布有同等的吗( mysql 客户)?

    注意,我不仅对存储过程感兴趣,而且本质上对在Mariadb上执行脚本时可能出错的任何错误都感兴趣。

    2 回复  |  直到 6 年前
        1
  •  1
  •   O. Jones    6 年前

    在mysql/mariadb存储过程中 ,您可以编写此类内容,例如:

    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
      ROLLBACK;
      @error := 'got exception';
    END;
    

    你也可以写 DECLARE EXIT HANDLER FOR condition statement .

    在存储过程之外,不能捕获异常(在客户端程序中除外)。

    这是文件。 https://dev.mysql.com/doc/refman/8.0/en/declare-handler.html

    如果您在文本文件中查找mysql错误,可以尝试此regex

    /^ERROR\s+\d{4}\s*([A-Z0-9]{5}):\s*.*$/
    

    它看起来像 ERROR 2003 (HY000): Can't connect to MySQL server on '172.16.1.169'.

        2
  •  0
  •   markusjm    6 年前

    Mariadb 10.1支架 Atomic Compound Statements . 它允许您在存储的过程之外创建异常处理程序。

    BEGIN NOT ATOMIC
      DECLARE EXIT HANDLER FOR SQLEXCEPTION
      BEGIN  
       ROLLBACK;
       RESIGNAL;
      END;
    
      START TRANSACTION;
    
        stmt1;
        ....
        stmtN;
    
      COMMIT;
    END