更新时间:2024-11-12 GMT+08:00
分享

DBE_PLDEVELOPER.gs_errors

用于记录PL/SQL对象(存储过程、函数、包、包体)编译过程中遇到的报错信息,如表1所示。

打开plsql_show_all_error参数后,如果编译过程中存在报错,则会跳过报错继续编译并把报错信息记录在gs_errors中,如果关闭plsql_show_all_error参数,且behavior_compat_options参数不为skip_insert_gs_source,则会直接将报错信息插入此表中。

该表的owner是创建的用户,修改存储过程或者package的owner不会修改该表信息。

  • 创建包头时的开头(as/is之前)和结尾(end之后),如果出现错误,不会记录在gs_errors表格里面,会直接在客户端返回错误的行号和该行具体内容,返回的行号不一定准确。个别is本身和end本身错误场景也不会记录在gs_errors表格里面。
  • 创建包体时的开头(as/is之前)和结尾(end之后),如果出现错误,不会记录在gs_errors表格里面,会直接在客户端返回错误的行号和该行具体内容,返回的行号不一定准确。个别is本身和end本身错误场景也不会记录在gs_errors表格里面。
  • 创建包体时,函数或者存储过程的结尾(end之后),如果出现错误,不会记录在gs_errors表格里面,会直接在客户端返回错误的行号和该行具体内容,行号不一定准确。
  • 创建包体时,函数或者存储过程的开头(as/is 以及 as/is之前),如果出现错误,报错行数不准确。
  • 创建包头时,变量声明少分号,会记录在gs_errors表格里面,记录的报错行号不准确。开启参数不会记录。
  • 包体内存储过程或函数内部,自治事务标识符PRAGMA AUTONOMOUS_TRANSACTION声明错误时,不能确保是否能记录在gs_errors表里。
  • 客户端直接报错,但是gs_errors表格未记录的情况,如果客户端报错行号不对,本需求不纠正已报错的行号。
  • 对于类似if ....then、for....loop、when .... then语句中间的错误或EXCEPTION本身错误,报错行号在本行,而不是下一个分号所在行。
  • 包内存储过程或函数内部begin本身错误的场景,报错行数不准。
  • gs_errors权限与pg_catalog下的系统表保持一致(系统管理员与普通用户不允许drop、alter、delete、update、insert,允许select),利用allow_system_table_mods这个guc控制前向兼容(允许drop、alter、delete、update、insert以及select),此guc参数默认为off,修改此guc参数生效需要重启数据库。
表1 DBE_PLDEVELOPER.gs_errors字段

名称

类型

描述

id

oid

对象id。

owner

bigint

对象创建用户id。

nspid

oid

对象的模式id。

name

name

对象名。

type

text

对象类型(procedure/function/package/package body)。

line

integer

行号。

src

text

报错信息。

相关文档