在带有索引的表上调用带有查询的类型构造函数时,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; T_MY_TYPE'
时参数的数量或类型错误请注意,没有关联运算符的类型构造函数没有问题,请参阅:
SELECT t_my_type(NULL,
NULL,
NULL,
NULL)
FROM my_table mt
WHERE mt.att3 = 1
OR mt.att3 > 3;
答案 0 :(得分:0)
支持请求已注册为错误,请参阅Bug 27653957 : TYPE CONSTRUCTOR FUNCTION FAILS WITH ORA 6553 PLS-306 WITH INDEX
在解决之前,解决方法(如Oracle Bug中所述)是删除构造函数。如果你有空的初始化(即v_variable := t_my_type()
),这可能会有点痛苦
在整个代码中,因为您需要用NULL替换它们
(即v_variable := t_my_type(NULL, NULL, NULL, NULL)
)