ORA-29256: Cursor contains both regular and array defines which is illegal
Cause: Both define_array and define_column have been called on this cursor. This is illegal. It is not possible for a cursor to both contain regular and array defines. The semantics of this setting are nonsensical. Array defines are used to move data from select queries into PL/SQL tables and regular defines to move data from select queries into PL/SQL variables.
Action: Modify your PL/SQL program to only perform calls to one of the two functions depending on the situation at hand.
ORA-29256错误表明在开启一个游标的时候,存在游标中包含的既有普通定义变量又有数组定义变量,而这是一种不合法的状态,所以出现了ORA-29256这个错误。
(1) 将游标中的所有变量都替换为数组变量;
(2) 如果只需要替换单个变量,则只保留游标中的单个变量,而不是数组变量;
(3) 使用带有无参数的for循环来处理查询的结果,而不是使用带有可变参数的for循环,例如使用for x in (select ..) 而不是for x in (select …) 中的这样的可变参数;
(4) 将“select … into …”改写为批量更新以替换多个变量;
(5) 尝试使用一些其他技术,如 INTO 接口,代替数组变量。