Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:如何为信号选择合适的SQLSTATE值?_Mysql_Sql_Error Handling_Signals_Mariadb - Fatal编程技术网

MySQL:如何为信号选择合适的SQLSTATE值?

MySQL:如何为信号选择合适的SQLSTATE值?,mysql,sql,error-handling,signals,mariadb,Mysql,Sql,Error Handling,Signals,Mariadb,这是一个主观上正确答案的技术问题,而不是征求意见的问题!在阅读之前,请不要因为“没有建设性”而删除它。谢谢 嗨 我希望在我编写的触发器和其他函数中检测到某些错误时发出信号,然后在外部函数中处理它们。有多种类型的错误,必须以不同的方式处理。首先,我认为我可以通过检查处理程序中的消息文本来区分信号,这将捕获所有的'45000',但后来我意识到访问处理程序中的消息文本是不可能的(至少在10.1.21-10.1中不可能)。所以现在我想为每种错误类型发出具有不同SQLSTATE值的信号,以便能够将它们分开

这是一个主观上正确答案的技术问题,而不是征求意见的问题!在阅读之前,请不要因为“没有建设性”而删除它。谢谢

我希望在我编写的触发器和其他函数中检测到某些错误时发出信号,然后在外部函数中处理它们。有多种类型的错误,必须以不同的方式处理。首先,我认为我可以通过检查处理程序中的消息文本来区分信号,这将捕获所有的'45000',但后来我意识到访问处理程序中的消息文本是不可能的(至少在10.1.21-10.1中不可能)。所以现在我想为每种错误类型发出具有不同SQLSTATE值的信号,以便能够将它们分开

我应该如何选择对应于单个错误的SQLSTATE值?

我知道前两个字符指定了类;'00'=>成功,'01'=>警告,'02'=>未找到,>'02'=>异常。我还理解“45000”表示未处理的用户定义异常,因此它是通用用户引发信号的值。但是,如果信号的最后三个字符以大于“02”的值开头,我是否有两个字符选择任意值?

我的意思是,显然不是,因为'42000'可能意味着ER_SP_错误的名称(不正确的例程名称),这是服务器引发的错误


那么正确的策略是什么呢如何为用户发出的信号选择一个合适的SQLSTATE,它不会与任何已经有意义的SQLSTATE冲突?

我建议您通读MySQL和MariaDB文档,其中列出了所有现有的
SQLSTATE
值。那就用别的东西。@Barmar:好吧,是的;首先,你看到那东西了吗?事实上有成千上万个。尽管如此,我可以(理论上)将它们从手册中正则化,然后对照它们检查我的选择。但是,第二,这些都会发生变化和倍增。所以,如果我只是选择了一个,那么它很可能会发生,在即将到来的版本中,我的选择将与预定义的版本发生冲突。这可能会导致我的代码以惊人的方式刹车。我怀疑没有什么好的解决方案。我在:对于用户定义的条件,MariaDB和MySQL建议使用“45000”SQLSTATE类。@Barmar:谢谢!这个链接实际上提供了很多信息。所以我把它当作,;我应该将我的SQLSTATEs放在'45'类中,这样我就可以自由选择我喜欢的子类。此外,该链接还写道:“标准SQL规范指出,以0、1、2、3、4、A、B、C、D、E、F和G开头的类是为标准定义的类保留的,而其他类是特定于供应商的。”因此,一般来说,最好避免使用这些类。虽然,它也说:“然而,MariaDB和MySQL并没有严格遵守这条规则。”。。。