首批通过分布式安全可靠测评,为关键业务系统打造
在 OceanBase 数据库 Oracle 模式下进行类型运算报 inconsistent datatypes
更新时间:2024-01-22 01:56
问题描述
在 Oracle 数据库中可以正常做类型运算,而在 OceanBase Oracle 模式中做类型运算时会报 ora-00932 inconsistent datatypes 错误。
OceanBase 数据库 Oracle 模式下做类型运算示列如下。
创建测试表 t。
CREATE TABLE t(c1 DATE); CREATE TABLE t3(c1 NUMBER);执行存储过程验证类型运算。
obclient > BEGIN SELECT MIN(c1) INTO fee1 FROM t; INSERT INTO t3 VALUES (fee1 - TO_DATE ('2020-01-01', 'yyyy-mm-dd')); END; /输出结果为。
PL/SQL procedure successfully completed
OceanBase Oracle 模式下做类型运算示列如下。
创建测试表 t。
CREATE TABLE t(c1 DATE); CREATE TABLE t3(c1 NUMBER);执行存储过程验证类型运算。
obclient > DCLARE fee1 DATE; fee2 NUMBER(14, 2); BEGIN SELECT MIN(c1) INTO fee1 FROM t; INSERT INTO t3 VALUES (fee1 - TO_DATE('2023-08-01', 'yyyy-mm-dd')); end; /输出结果如下。
ORA-00932: inconsistent datatypes at anonymous block , line : 6, col : 3
问题原因
因为 OceanBase 数据库会用 fee1 的值做类型推导,如果值为 null,null-date 进行推导会报错。
解决方法
绕过的方法是在 fee1 上加显示的 cast,如 to_date(fee1)。