问题现象
PL 在 for loop cursor 中使用 goto 可能报错 -5589,Cursor is already open。
问题原因
在 for loop cursor 中使用 goto lable 时,由于未自动关闭 cursor,循环下次进来时发现 cursor 已经打开,从而报错 -5589。
问题的风险及影响
风险较低,在 for loop cursor 中使用 goto 语句才会遇到。PL 报错 -5589。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响的版本
OceanBase 数据库 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法及规避方式
解决方法:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V2.2.77 BP13(oceanbase-2.2.77-113000052022082622)及之后版本、V3.1.2 BP10(oceanbase-3.1.2-110000022022092714)及之后版本、V3.2.3 BP6(oceanbase-3.2.3.3-106000102022111521)及之后版本。
规避方式:
根据具体使用场景可将
goto语句替换为exit语句绕过。