【发布时间】:2018-07-12 07:35:35
【问题描述】:
Oracle 12C R2 (12.2.0.1) 不支持关联运算符 => 在调用类型构造函数并在具有索引的表上进行查询时?还是有另一种方法来调用构造函数并显式地为属性赋值?
请注意,这适用于 11G 和 12C R1
即。 如果我有一个自定义类型,例如:
CREATE OR REPLACE TYPE T_MY_TYPE FORCE AS OBJECT (
id NUMBER(10, 0),
attribute1 VARCHAR2(60 BYTE),
attribute2 VARCHAR2(2 BYTE),
attribute3 VARCHAR2(3 BYTE),
CONSTRUCTOR FUNCTION T_MY_TYPE RETURN SELF AS RESULT );
还有一个像这样的表格:
CREATE TABLE my_table (
idd NUMBER(10, 0),
att1 VARCHAR2(60 BYTE),
att2 NUMBER(4),
att3 NUMBER(8),
att4 NUMBER(5)
);
INSERT ALL
INTO my_table (idd, att1, att2, att3, att4) VALUES (1, '123', 3, 4, 4)
INTO my_table (idd, att1, att2, att3, att4) VALUES (2, '123', 7, 4, 4)
INTO my_table (idd, att1, att2, att3, att4) VALUES (3, '234', 5, 4, 4)
SELECT *
FROM dual;
我尝试通过以下方式查询它:
SELECT t_my_type(attribute1 => NULL,
id => NULL,
attribute2 => NULL,
attribute3 => NULL)
FROM my_table mt
WHERE mt.att3 = 1
OR mt.att3 > 3;
它有效,但只要我使用以下命令在 attr3 上添加索引:
CREATE INDEX myIndex ON my_table (att3);
失败并出现 ORA-06553: PLS-306: 调用“T_MY_TYPE”时参数的数量或类型错误
请注意,没有关联运算符的类型构造函数没有问题,请参阅:
SELECT t_my_type(NULL,
NULL,
NULL,
NULL)
FROM my_table mt
WHERE mt.att3 = 1
OR mt.att3 > 3;
【问题讨论】:
-
这看起来像是一个可能的错误,您能向 Oracle 支持报告这个吗?
-
@learningloop 我已经举报了。