
# 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不会修改该表信息。
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
- 创建包头时的开头（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参数生效需要重启数据库。
 
 表1DBE_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    | 报错信息。                                          |
   
