【问题标题】:Oracle association operator with types and table with index具有类型的 Oracle 关联运算符和具有索引的表
【发布时间】: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 我已经举报了。

标签: oracle oracle12c


【解决方案1】:

支持请求已注册为错误,请参阅Bug 27653957 : TYPE CONSTRUCTOR FUNCTION FAILS WITH ORA 6553 PLS-306 WITH INDEX

在解决之前,解决方法(如 Oracle 错误中所述)是删除构造函数。如果您有空初始化(即v_variable := t_my_type()),这可能会有点痛苦 在整个代码中,因为您需要将这些替换为 NULL (即v_variable := t_my_type(NULL, NULL, NULL, NULL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-13
    • 2018-12-25
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多