字串超长时是否使用截断并告警(str_trunc_warning)
📄字数 857
👁️阅读量 加载中...
引入版本
v11.0.0
功能描述
系统内被截断的字符串是否以警告的形式上报。
参数属性
| 属性 | 属性值 |
|---|---|
| 参数类型 | BOOLEAN |
| 默认值 | FALSE |
| 取值范围 | TRUE,FALSE |
| 影响范围 | 系统级 |
| 修改方式 | 在线修改,立即生效 |
使用场景说明
- 该参数控制系统对产生截断的字符串的处理方式。
| str_trunc_warning | 作用及影响 |
|---|---|
| true | 数据长度超过目标类型精度,数据被截断处理,并以警告的形式通知客户端(send_warning = true 的前提)。 |
| false | 数据长度超过目标类型精度,系统上报 E17111 或 E19230 异常,并中断当前任务。 |
- 字符串截断处理的场景主要有:
| 字符串截断处理的可能场景 |
|---|
| 1. 针对带精度字符串字段的数据更新,新值长度大于原字段精度; 2. 针对带精度字符串字段的数据插入,新值长度大于原字段精度; 3. 在 PL/SQL 中对带精度的字符串变量赋值,字符串常量值长度大于被赋值变量的精度; 4. 其它数据类型向带精度的字符串数类型转换,原数据转换后数据长度大于目标精度; 5. DML INTO 场景,原字符串数据长度大于 INTO 的目标精度; |
示例
sql
-- 在线修改 str_trunc_warning
SQL> SET str_trunc_warning TO true;
-- 在线查看 str_trunc_warning
SQL> SHOW str_trunc_warning
/*
* 场景一:
* 1. str_trunc_warning = false;
* 2. auto_commit = true;
*/
SQL> CREATE TABLE t1(c1 VARCHAR(5)); -- 创建表;
SQL> INSERT INTO t1 VALUES('abcdef'); -- E19230 异常,中断任务;
/*
* 场景一:
* 1. str_trunc_warning = true;
* 2. auto_commit = true;
* 3. send_warning = true;
* 4. 基于 "场景一" 的环境;
*/
SQL> INSERT INTO t1 VALUES('a'); -- 插入测试数据;
SQL> UPDATE t1 SET c1 = '123456'; -- 执行成功,数据被截断为 '12345',
-- 并附带警告信息;