首批通过分布式安全可靠测评,为关键业务系统打造
调用 PL 错误,错误代码 4161/ORA-00600
更新时间:2026-05-29 08:46
本文介绍调用 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)