举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > PostgreSQL PL/Tcl 中的错误处理

PostgreSQL PL/Tcl 中的错误处理

2023-04-21 15:31

 PostgreSQL PL/Tcl 中的错误处理

PL/Tcl 函数中的 Tcl 代码或者从 PL/Tcl 函数中调用的代码可以抛出一个错误,错误可以由执行某些非法操作产生或者通过使用 Tcl error命令或者 PL/Tcl 的elog命令产生。Tcl 中可以使用 Tcl catch命令捕获这类错误。如果一个错误没有被捕捉但是被允许传播到该PL/Tcl函数执行的顶层,它会在该函数的调用查询中被报告为一个SQL错误。

相反,在 PL/Tcl 的spi_execspi_prepare以及spi_execp命令中发生的SQL错误会被报告为 Tcl 错误,因此它们也可以被 Tcl 的catch命令捕获(这些PL/Tcl命令中的每一个都在一个子事务中运行它的SQL操作,该子事务在错误时会被回滚,这样任何部分完成的操作也会被自动清除)。同样地,如果一个错误被传播到顶层而没有被捕获,它会转变成SQL错误。

Tcl 提供了一个errorCode变量,它表示有关于一个错误的附加信息,它的格式易于 Tcl 程序解释。该变量的内容符合 Tcl 列表格式,第一个词标识报告该错误的子系统或者库,之后的内容则留给子系统或者库来填充。对于 PL/Tcl 命令报告的数据库错误,第一个词是POSTGRES,第二个词是 PostgreSQL 的版本号,剩下的部分是域名称/域值构成的对,它们提供有关该错误的详细信息。域 SQLSTATEcondition以及message总是会被提供(前两个表示附录 A中所示的错误代码和情况名称)。可能出现的域包括 detailhintcontextschematablecolumndatatypeconstraintstatementcursor_positionfilenamelineno以及 funcname

使用 PL/Tcl 的errorCode信息的一种便捷方式是把它载入到一个数组中,这样域名称就变成了数组下标。这样做的代码看起来像这样

if {[catch { spi_exec $sql_command }]} {
    if {[lindex $::errorCode 0] == "POSTGRES"} {
        array set errorArray $::errorCode
        if {$errorArray(condition) == "undefined_table"} {
            # deal with missing table
        } else {
            # deal with some other type of SQL error
        }
    }
}

(双冒号显式地指定errorCode是一个全局变量)。


阅读全文
以上是鳄鱼CMS为你收集整理的 PostgreSQL PL/Tcl 中的错误处理全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  PostgreSQL 可信的和不可信的 PL/Perl

    PostgreSQL 可信的和不可信的 PL/Perl

    2023-05-19

    通常,PL/Perl 被作为一种“可信的”编程语言安装,其名称 为plperl。在这种设置下,为了保持安全性禁用了某些 Perl 操作。一般...

  •  PostgreSQL 匿名代码块

    PostgreSQL 匿名代码块

    2023-06-19

    PL/Python 也支持用DO语句调用的匿名代码块:DO $$# PL/Python 代码$$ LANGUAGE plpythonu;匿名代码块没有参数,并且任何可能返...

  • html中dom HTML DOM Frameset rows 属性

    html中dom HTML DOM Frameset rows 属性

    2023-04-09

    Frameset rows 属性 Frameset 对象定义和用法rows 属性可设置或返回框架中行的数目和尺寸。由逗号分割的像素或百分比列表定义了...

  • html style margin HTML DOM Style marginLeft 属性

    html style margin HTML DOM Style marginLeft 属性

    2023-03-26

    Style marginLeft 属性 Style 对象定义和用法marginLeft 属性设置或返回元素的左外边距。语法设置 marginLeft 属性:Object.styl...

  •  HTML DOM Style maxHeight 属性

    HTML DOM Style maxHeight 属性

    2023-04-16

    Style maxHeight 属性 Style 对象定义和用法maxHeight 属性设置或返回元素的最大高度。maxHeight 属性只在块级元素或绝对/固定位...

© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们