基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
PLS-00000 ~ PLS-00999
更新时间:2023-07-18 17:25:58
PLS-00109:unknown exception name '%.*s' in PRAGMA EXCEPTION_INIT
OceanBase 错误码:9583
SQLSTATE:HY000
错误原因:在编译指示的范围内没有找到在
EXCEPTION_INIT编译指示中引用的异常名称的声明。解决方式:确保
pragma遵循异常声明并且在同一范围内。
PLS-00114:identifier ' %.*s' too long
OceanBase 错误码:9526
SQLSTATE:HY000
错误原因:PL 变量的名称超过 128 个字符。 合法标识符(包括带引号的标识符)的最大长度为 128 个字符。可能是由于字符串文字可能被错误地用双引号而不是单引号引起来,在这种情况下,PL 将其视为带引号的标识符。
解决方法:缩短标识符。
PLS-00119:Duplicate having-clause in table expression
OceanBase 错误码:9501
SQLSTATE:HY000
错误原因:在
SELECT语句中找到两个或多个HAVING子句。解决方法:删除一个
HAVING子句,并在必要时通过AND或OR连接逻辑表达式。
PLS-00124:name of exception expected for first arg in exception_init pragma
OceanBase 错误码:9674
SQLSTATE:HY000
错误原因:传递给 EXCEPTION_INIT pragma 的第一个参数不是异常名称。第一个参数必须是合法声明的异常名称。
解决方法:用合法声明的异常名称替换第一个参数。
PLS-00128:Illegal number of arguments for pragma EXCEPTION_INIT
OceanBase 错误码:9675
SQLSTATE:HY000
错误原因:传递给命名 pragma 编译器指令的实际参数数量不正确。参数列表中省略了必需的参数,或者 pragma 语法有错误(例如:两个参数之间可能缺少逗号)。
解决方法:提供缺少的参数,或更正错误的语法。
PLS-00154:An object type may have only 1 MAP or 1 ORDER method
OceanBase 错误码:9523
SQLSTATE:HY000
错误原因:声明了多个
MAP或ORDER函数。 一个对象类型只能具有一个MAP函数或ORDER函数,不能有多个MAP函数,也不能有多个ORDER函数,并且不能同时具有两者。
PLS-00155:Only a function may be a MAP, ORDER or CONSTRUCTOR method
OceanBase 错误码:9525
SQLSTATE:HY000
错误原因:过程被声明为
MAP、ORDER或CONSTRUCTOR方法。仅函数可以是MAP、ORDER或CONSTRUCTOR方法。
PLS-00157:Only schema-level programs allow %s
OceanBase 错误码:9506
SQLSTATE:HY000
错误原因:为程序包或类型指定了
AUTHID或DEFAULT COLLATION子句。 仅模式级别存储过程、程序包和类型才支持这些子句。解决方法:删除子句。
PLS-00179:$ERROR: %.*s
OceanBase 错误码:9540
SQLSTATE:HY000
错误原因:使用了
$ERROR指令。
PLS-00201: identifier '%.*s' must be declared
OceanBase 错误码:5543,5546
SQLSTATE:42000
错误原因:
引用未声明的变量、异常程序、过程。
引用未授予权限的类型。
引用仅通过角色授予权限的类型。
存储的对象(程序包、过程、函数、触发器、视图)在对象所有者的安全域中运行,除了
PUBLIC之外,没有启用任何角色。
解决方法:
检查您的引用名称的拼写和声明。
验证所引用项的声明是否正确放置在块结构中。
如果确实声明了所引用的项目,并且您认为自己有权引用该项目,请检查权限。
PLS-00204:function or pseudo-column '%s' may be used inside a SQL statement only
OceanBase 错误码:9682
SQLSTATE:HY000
错误原因:程序语句中使用了伪列或禁止的函数。SQL 伪列( LEVEL、ROWID、ROWNUM )只能在 SQL 中使用声明。类似地,某些函数(如:DECODE、DUMP 和 VSIZE )和 SQL 组函数(平均值、最小值、最大值、计数、总和、STDEV、方差)可以仅在 SQL 语句中使用。
解决方法:从程序中删除伪列引用或函数调用陈述。或者,将程序语句替换为 SELECT INTO 语句。例如,用
SELECT DECODE(rating, 1, 5000, 2, 2500, ...) INTO bonus FROM dual;描述替换bonus := DECODE(rating, 1, 5000, 2, 2500, ...);。
PLS-00206:%%TYPE must be applied to a variable, column, field or attribute, not to '%.*s'
OceanBase 错误码:9547
SQLSTATE:HY000
错误原因:使用
%TYPE数据类型属性声明的程序对象不是合适的类型,该类型必须是变量、列、记录组属性,子程序形式参数或其它可以赋值的对象。解决方法:在变量声明中添加一个初始化子句。 如果初始化的语法过于复杂,则可以添加一个函数调用。
PLS-00218:a variable declared NOT NULL must have an initialization assignment
OceanBase 错误码:9514
SQLSTATE:HY000
错误原因:通常,声明中没有初始化子句的变量会自动初始化为
NULL。 这对于NOT NULL变量是不合逻辑的。 因此,需要一个初始化子句。解决方法:在变量声明中添加一个初始化子句。 如果初始化的语法过于复杂,则可以添加一个函数调用。
PLS-00254:OUT and IN/OUT modes cannot be used in this context
OceanBase 错误码:9502
SQLSTATE:HY000
错误原因:
USING子句未正确使用实际参数模式(OUT或IN/OUT)。 对于OPEN语句中的USING子句,仅允许IN模式。解决方法:将
USING子句中的参数模式更改为正确的模式。
PLS-00304:cannot compile body of '%.*s' without its specification
OceanBase 错误码:9520
SQLSTATE:HY000
错误原因:找不到编译程序包主体所需的编译程序包规范。可能原因如下:
软件包名称拼写错误。
从未编译过软件包规范。
无法访问已编译的程序包规范。软件包规范必须在编译软件包主体之前进行编译,并且编译器必须有权访问已编译的规范。
解决方法:
检查软件包名称的拼写。
在编译程序包主体之前,请先编译程序包规范。
请确保编译器可以访问已编译的规范。
PLS-00305:previous use of '%.*s' conflicts with this use
OceanBase 错误码:9529
SQLSTATE:HY000
错误原因:在查找游标、过程、函数或程序包的预声明时,编译器在同一作用域中找到了另一个具有相同名称的对象。 或者,程序包子程序的头部中的名称和主体中的名称不匹配。
解决方法:
检查游标、过程、函数的拼写及程序包名称。
检查在同一作用域中声明的所有常量、变量、参数和异常的名称。
删除或重命名具有重复名称的对象。
修改子程序头部中的名称,使其与程序主体中的名称相匹配。
PLS-00306:wrong number or types of arguments in call to '%.*s'
OceanBase 错误码:9542
SQLSTATE:HY000
错误原因:当子程序的调用无法与该子程序名称的任何声明匹配时,将会报此错误码。有以下几种情况:
子程序名称可能拼写错误。
参数可能具有错误的数据类型。
声明可能有误或声明可能被错误地放置在块结构中。 例如,以拼写错误的名称或者数据类型错误的参数调用内置的平方根函数
SQRT。
解决方式:
检查子程序名称的拼写和声明。
确认它的调用是正确的。
确认参数是正确的数据类型。
如果不是内置的函数,则将声明正确放置在块结构中。
PLS-00307:too many declarations of '%.*s' match this call
OceanBase 错误码:9544
SQLSTATE:HY000
错误原因:子程序或游标名称的声明是模棱两可的,因为在使用参数数据类型的隐式转换时,声明和调用之间没有完全匹配,并且有多个声明与调用匹配。可能存在以下原因:
子程序或游标名称可能拼写错误。
声明可能有误。
声明可能未正确地放置在块结构中。
解决方式:
检查子程序或游标名的拼写和声明。
确认调用正确。
确认参数具有正确的数据类型。
如果不是内置函数,则将声明正确放置在块结构中。
PLS-00318:type '%.*s' is malformed because it is a non-REF mutually recursive type
OceanBase 错误码:9539
SQLSTATE:HY000
错误原因:类型声明的格式错误,因为申明中包含了相互递归的非 REF 关系。可能为以下情况:
包含递归自引用
包含相互递归引用
解决方式:在声明中使用其他类型避免递归。
PLS-00320:the declaration of the type of this expression is incomplete or malformed
OceanBase 错误码:9597
SQLSTATE:HY000
错误原因:在声明中,变量或游标的名称拼写错误,或者声明中包含前向引用。PL/SQL 中不允许前向引用。变量或游标必须先声明,然后才能在其他语句(包括其他声明性语句)中引用。例如:
dept_rec的声明会引发此异常,因为它引用了尚未声明的游标dept_cur。示例如下:DECLARE dept_rec dept_cur%ROWTYPE; CURSOR dept_cur IS SELECT ...解决方法:检查声明中所有标识符的拼写。如有必要,移动声明的位置,消除前向引用。
PLS-00321:expression '%.*s' is inappropriate as the left hand side of anassignment statement
OceanBase 错误码:9513
SQLSTATE:HY000
错误原因:该表达式不能出现在赋值语句的左侧。 例如,函数
SYSDATE不能出现在赋值语句的左侧,例如SYSDATE:= '01 -JAN-1990';。解决方法:修改不正确的赋值语句。
PLS-00322:Constant declarations should contain initialization assignments
OceanBase 错误码:9515
SQLSTATE:HY000
错误原因:常量声明缺少初始值。
解决方法:更正常量声明。
PLS-00323:subprogram or cursor '%.*s' is declared in a package specification and must be defined in the package body
OceanBase 错误码:9585
SQLSTATE:HY000
错误原因:在包头中声明的游标或者子过程,必须在包体中定义。
解决方法:检查子程序名称的拼写。如有必要,添加缺少的子程序体到包体。
PLS-00325:non-integral numeric literal %.*s is inappropriate in this context
OceanBase 错误码:9670
SQLSTATE:HY000
错误原因:在需要整数的上下文中使用了非整数数字文本。
解决方法:用整数文本替换不合适的文本。
PLS-00363:expression '%.*s' cannot be used as an assignment
OceanBase 错误码:9550
SQLSTATE:HY000
错误原因:在语句中,错误的使用了文字、常量、
IN参数、LOOP 中的counter变量或函数调用。解决方法:更改语句表达式。
PLS-00366:subtype of a not null type must also be not null
OceanBase 错误码:9684
SQLSTATE:HY000
错误原因:子类型定义为
NOT NULL后,不允许它被用作另一个定义为NULL的子类型的基类型。例如:DECLARE SUBTYPE Weekday IS INTEGER NOT NULL; SUBTYPE Weekend IS Weekday;。解决方法:修改子类型定义以消除冲突。
PLS-00371:at most one declaration for '%.*s' is permitted
OceanBase 错误码:9507
SQLSTATE:HY000
错误原因:对变量的引用是模糊的,因为该变量有多个声明。 在块、过程或函数的声明部分,最多允许一个具有给定标识符的局部变量。 给定的变量最多可以出现在一个块中。
解决方法:检查变量的拼写。 如有必要,请删除变量的所有声明,仅保留一个声明。
PLS-00372:In a procedure, RETURN statement cannot contain an expression
OceanBase 错误码:5583
SQLSTATE:42000
错误原因:在过程中,
RETURN语句包含不允许包含表达式。解决方法:从
RETURN语句中删除表达式,或将过程重新定义为函数。
PLS-00373:EXIT/CONTINUE label '%.*s' must label a LOOP statement
OceanBase 错误码:9512
SQLSTATE:HY000
错误原因:
EXIT或CONTINUE语句中的标签未引用LOOP语句。EXIT或CONTINUE语句无需指定标签,如果指定了标签(如EXIT my_label或CONTINUE my_label中的标签),则标签必须引用LOOP语句。解决方法:确保标签名称的拼写正确,并且引用了
LOOP语句。
PLS-00375:illegal GOTO statement; this GOTO cannot branch to label '%.*s'
OceanBase 错误码:9505
SQLSTATE:HY000
错误原因:
GOTO语句的分支是从包含语句序列的结构体(例如,循环或异常处理程序)外部到语句序列内的标签。这样的分支是不允许的。解决方式:将
GOTO语句移到语句序列内或将带标签的语句移到语句序列外。
PLS-00376:illegal EXIT/CONTINUE statement; it must appear inside a loop
OceanBase 错误码:9510
SQLSTATE:HY000
错误原因:在循环结构体之外找到了
EXIT或CONTINUE语句。EXIT语句从循环中过早退出,而CONTINUE语句用于开始循环的下一个迭代。 这两个语句必须始终出现在循环中。解决方法:删除
EXIT或CONTINUE语句,或将其放入循环结构体中。
PLS-00382:expression is of wrong type
OceanBase 错误码:9519
SQLSTATE:HY000
错误原因:表达式具有错误的数据类型。
解决方法:更改表达式的数据类型。 您可能要使用数据类型转换功能。
PLS-00403:expression '%.*s' cannot be used as an INTO-target of a SELECT/FETCH statement
OceanBase 错误码:9665
SQLSTATE:HY000
错误原因:
FETCH语句无法为赋值目标赋值它的INTO列表,因为目标不是合法形成和声明的变量。例如:以下赋值是非法的,因为'Jones'是一个字符串,而不是一个变量:FETCH my_cur INTO 'Jones'。解决方法:检查分配目标的拼写和声明。确保遵循形成变量名称的规则。
PLS-00410:duplicate fields in RECORD,TABLE or argument list are not permitted
OceanBase 错误码:9508
SQLSTATE:HY000
错误原因:声明用户定义的记录时,两个字段具有相同的名称。与数据库表中的列名一样,用户定义的字段名必须唯一。
解决方法:检查字段名称的拼写,然后删除重复的名称。
PLS-00438:value in LIMIT clause: \'%.*s\' use is invalid
OceanBase 错误码:9518
SQLSTATE:HY000
错误原因:
FETCH INTO后的LIMIT子句的数值类型不对。例如下面的语句是非法的,因为LIMIT子句需要一个数字值。FETCH c1 BULK COLLECT INTO var_tab LIMIT 'aaaaa';。解决方法:修改
LIMIT子句的表达式使其后面是个数字值。如FETCH c1 BULK COLLECT INTO var_tab LIMIT '22333';。
PLS-00485:in exception handler, '%.*s' must be an exception name
OceanBase 错误码:5545
SQLSTATE:42000
错误原因:未声明为异常的标识符出现在异常处理程序
WHEN子句中。WHEN子句中只有异常的名称有效。解决方式:检查异常名称的拼写,确保正确声明了该异常。
PLS-00488:'%.*s' must be a type
OceanBase 错误码:9543
SQLSTATE:HY000
错误原因:声明或表达式中的数据类型说明符未指定合法的类型。可能存在以下情况:
可能未将
%TYPE属性添加到声明中。如DECLARE my_sal emp.sal%TYPE;my_ename emp.ename;,未申明%TYPE。在声明常量或变量时,要自动提供列的数据类型,可使用
%TYPE属性。在声明记录时,要自动提供行的数据类型,可使用
%ROWTYPE属性。
解决方式:确保数据类型说明符指定合法的类型。必要时请使用
%TYPE和%ROWTYPE属性。
PLS-00520:MAP methods must be declared without any parameters other than (optional) SELF
OceanBase 错误码:9532
SQLSTATE:HY000
错误原因:声明了
MAP成员函数的参数。MAP成员函数只能具有一个参数:默认的SELF参数。MAP函数不可以申明为任何参数,由编译器添加SELF参数。解决方法:删除
MAP函数中的参数。
PLS-00521:ORDER methods must be declared with 1 (one) parameter in addition to (optional) SELF
OceanBase 错误码:9538
SQLSTATE:HY000
错误原因:声明了没有用户指定参数的
ORDER函数。ORDER函数具有两个参数,一个是由编译器添加的默认SELF参数。 第二个参数由用户添加,并且必须与包含的对象类型相同。解决方法:修改参数类型。
PLS-00522:MAP methods must return a scalar type
OceanBase 错误码:9531
SQLSTATE:HY000
错误原因:编写
MAP成员函数时,返回的不是标量类型。解决方法:重写
MAP函数,使其返回标量类型。
PLS-00523:ORDER methods must return an INTEGER
OceanBase 错误码:9533
SQLSTATE:HY000
错误原因:
ORDER函数返回了除整数类型以外的类型。解决方法:重写
ORDER函数,使其返回整数类型。
PLS-00524:The parameter type in an ORDER method must be the containing object type
OceanBase 错误码:9534
SQLSTATE:HY000
错误原因:声明了没有用户指定参数的
ORDER函数。ORDER函数具有两个参数,一个是由编译器添加的默认SELF参数。 第二个参数由用户添加,并且必须与包含的对象类型相同。解决方法:修改参数类型。
PLS-00525:Within SQL statements, only equality comparisons of objects are allowed without a map or order function
OceanBase 错误码:9535
SQLSTATE:HY000
错误原因:没有提供
MAP或ORDER函数以进行相关比较。 如果未提供MAP或ORDER函数,则只能使用相等比较。解决方法:提供对象的
MAP或ORDER函数或将程序更改为仅使用相等比较。
PLS-00526:A MAP or ORDER function is required for comparing objects in PL/ SQL
OceanBase 错误码:9524
SQLSTATE:HY000
错误原因:在 PL 代码中,对象的比较未定义
MAP或者ORDER函数。解决方法:定义
MAP或ORDER函数并重试该操作。
PLS-00527:MAP or ORDER functions require a PRAGMA RESTRICT_REFERENCES specifying :WNDS,WNPS,RNPS,RNDS
OceanBase 错误码:9536
SQLSTATE:HY000
错误原因:
未指定
pragma restrict_references。已指定
pragma restrict_references, 但pragma restrict_references中缺少了以下参数中的任意一种:WNDS、WNPS、RNPS或RNDS。
解决方法:添加或更正
pragma,然后重试该操作。
PLS-00528:The parameters to an ORDER function must have IN mode
OceanBase 错误码:9537
SQLSTATE:HY000
错误原因:您已将
ORDER函数的参数声明为OUT或IN OUT模式。解决方法:更正参数声明为
IN模式。
PLS-00537:A VARRAY must have a positive limit
OceanBase 错误码:9611
SQLSTATE:HY000
错误原因:使用非正限制声明了 VARRAY 类型,例如:
VARRAY(0)。解决方法:声明具有正限制的 VARRAY 类型,然后重试该操作。
PLS-00538:subprogram or cursor '%.*s' is declared in an object type specification and must be defined in the object type body
OceanBase 错误码:9522
SQLSTATE:HY000
错误原因:指定的子程序在对象类型的规范中声明,但未在对象类型主体中定义。
解决方法:在对象类型主体中定义子程序,或从规范中删除声明。
PLS-00539:subprogram '%.*s' is declared in an object type body and must be defined in the object type specification
OceanBase 错误码:9521
SQLSTATE:HY000
错误原因:指定的子程序在对象类型的主体中声明,但未在对象类型的规范中定义。 游标主体可以不定义。
解决方法:在对象类型的规范中定义子程序,或从主体中删除声明。
PLS-00587:a static method cannot be invoked on an instance value
OceanBase 错误码:9527
SQLSTATE:HY000
错误原因:尝试使用对象实例值而不是类型名作为方法调用名称的限定符,但是在调用静态方法时只能将类型名用作限定符。
解决方法:如果方法是静态的,则使用类型名而不是对象实例值来限定方法的名称。
PLS-00594:the SELF parameter can be declared only as IN or as IN OUT
OceanBase 错误码:9530
SQLSTATE:HY000
错误原因:
SELF参数被声明为OUT参数。解决方法:将
SELF参数声明为IN或IN OUT参数。
PLS-00630:pipelined functions must have a supported collection return type
OceanBase 错误码:9601
SQLSTATE:HY000
错误原因:使用不支持的返回类型指定了流水线函数。不支持如下集合类型作为流水线函数的返回类型:
非集合。
PL/SQL 表。
关联数组。
PL/SQL 类型的集合:rowid、mlslabel,long,long raw,boolean,binary_integer,pls_integer,string 和 urowid。
解决方法:将支持的集合类型指定为流水线函数返回类型。
PLS-00655:only functions can be declared as PIPELINED
OceanBase 错误码:9600
SQLSTATE:HY000
错误原因:PIPELINED 类型只支持在 FUNCTION 中定义。
解决方式:将语句类型修改为 FUNCTION,或者去掉 PIPELINED 的使用。
PLS-00658:constructor method name must match type name
OceanBase 错误码:9528
SQLSTATE:HY000
错误原因:尝试使用对象实例值而不是类型名作为方法调用名称的限定符,但是在调用静态方法时只能将类型名用作限定符。
解决方法:如果方法是静态的,则使用类型名而不是对象实例值来限定方法的名称。
PLS-00661:RETURN statement in a CONSTRUCTOR cannot include an expression
OceanBase 错误码:9541
SQLSTATE:HY000
错误原因:在
CONSTRUCTOR主体的RETURN语句中存在表达式。解决方式:从
RETURN语句中删除该表达式。
PLS-00701:illegal ORACLE error number %.*s for PRAGMA EXCEPTION_INIT
OceanBase 错误码:9629
SQLSTATE:HY000
错误原因:传递给
EXCEPTION_INIT的错误码编号超出范围。错误码编号的范围为00001-09999(不包括00100)或者20000-20999(用于用户定义的错误)。解决方式:请使用有效的错误码。
PLS-00702:second argument to PRAGMA EXCEPTION_INIT must be a numeric literal
OceanBase 错误码:9676
SQLSTATE:HY000
错误原因:传递给 EXCEPTION_INIT pragma 的第二个参数不是数字文本(例如:变量),第二个参数的范围为
1-9999(不包括100)或者20000-20999(用于用户定义的错误)。解决方式:用有效的错误码编号替换第二个参数。
PLS-00710:Pragma AUTONOMOUS_TRANSACTION cannot be specified here
OceanBase 错误码:9509
SQLSTATE:HY000
错误原因:此处不能指定
AUTONOMOUS_TRANSACTION程序。解决方法:检查程序名称是否拼写正确。
PLS-00905:object '%.*s' is invalid
OceanBase 错误码:9548
SQLSTATE:HY000
错误原因:引用了无效的软件包规范或子程序。如果自从上次编译后,软件包规范或子程序的源代码或它引用的任何数据库对象已被丢弃,替换或更改,则该软件包或子程序无效。
解决方法:找到软件包规范或子程序无效的原因,并确保能重新正确的编译该软件包规范或子程序。
PLS-00994:Cursor Variables cannot be declared as part of a package
OceanBase 错误码:9516
SQLSTATE:HY000
错误原因:试图在程序包规范中声明一个游标变量,这是不允许的。 尽管可以在 PL 块、子程序或程序包中可以定义
REF CURSOR类型,但是游标变量只能在块或子程序中声明。解决方法:将游标变量声明移到 PL 块或子程序中。