调用 PL 错误,错误代码 4161/ORA-00600 时怎么解决?

,

本文介绍调用 PL 对象时出现 Invalid argument num 错误的原因和解决方法。

适用版本

OceanBase 数据库所有版本

问题现象

调用 PL 对象时,出现

Invalid argument num

的错误,但调用时使用的参数数量是正确的。

obclient> SELECT cus_concat(‘a’,‘b’); ORA-00600: internal error code, arguments: -4161, Invalid argument num

可能原因

出现

Invalid argument num

的错误,实际上是由于 PL 内部调用的某个表达式传参错误,例如执行以下 SQL 语句创建的函数中,调用了

CONCAT(a,b,‘1’)

,虽然创建函数的语句会执行成功,但由于 CONCAT 函数允许的参数数量是 2 个,因此在执行时会出现以上错误。

obclient> CREATE OR REPLACE FUNCTION cus_concat(a VARCHAR2,b VARCHAR2) RETURN VARCHAR2 AS c VARCHAR2(32); BEGIN c := CONCAT(a,b,‘1’); RETURN c; END; /

实际上,在调用 PL 时出现的传参数目不对会返回错误码 5555,错误信息为

Incorrect number of arguments

,调用示例如下。

obclient> SELECT cus_concat(‘a’,‘b’,‘c’); ORA-00600: internal error code, arguments: -5555, Incorrect number of arguments

解决方式

修改 PL 中表达式的传参方式,例如可以将上述函数修改为以下格式。

obclient> CREATE OR REPLACE FUNCTION cus_concat(a VARCHAR2,b VARCHAR2) RETURN VARCHAR2 AS d VARCHAR2(32); c VARCHAR2(32); BEGIN c := CONCAT(a,b); d := CONCAT(c,‘1’); RETURN d; END; / obclient> SELECT cus_concat(‘a’,‘b’) FROM DUAL; ±--------------------+ | CUS_CONCAT(‘A’,‘B’) | ±--------------------+ | ab1 | ±--------------------+ 1 row in set (0.01 sec)

赞!