问题现象
OceanBase 数据库 V4.x 版本 Oracle 模式租户下,PL 中 insert clog 字段超过 32767 字符大小,会报错 PLS-00172: string literal too long。

同样这条 Insert SQL 不放在 BEGIN .. END 里执行,而是单独在 SQL 窗口执行成功,不会报错。
关键日志信息。
[2024-05-23 02:45:42.768575] WDIAG [PL] parse (ob_pl_parser.cpp:139) [925][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=71][errcode=-9644] parse stmt block failed(ret=-9644, stmt_block=BEGIN
[2024-05-23 02:45:42.768616] WDIAG [SQL.PARSER] parse (ob_parser.cpp:1135) [925][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=38][errcode=-9644] failed to parse stmt as pl(stmt=BEGIN
问题原因
OceanBase 数据库 V4.x 版本为兼容 Oracle 数据库,对 PL 里的 string 长度做了限制,要求 str_len<=32767 字符。
问题的风险及影响
PL 执行失败,影响较低。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法及规避方式
存在超过 32767 字符大小的 string 时,将相关 SQL 不放在 PL 里执行。