2

考虑以下脚本:

CREATE TYPE t1 AS TABLE OF VARCHAR2(10);
/
CREATE TYPE t2 AS VARRAY(10) OF VARCHAR2(10);
/

CREATE TABLE t (
  id NUMBER(10),
  t1 t1,
  t2 t2
)
NESTED TABLE t1 STORE AS t1_nt;

INSERT INTO t VALUES (1, NULL, NULL);
INSERT INTO t VALUES (2, t1('abc'), t2('abc'));

SELECT * FROM t WHERE 'abc' MEMBER OF t1;
SELECT * FROM t WHERE 'abc' MEMBER OF t2;

最后两个SELECT语句的输出是

ID    T1      T2
-------------------
2     [abc]   [abc]

ORA-00932: inconsistent datatypes: expected UDT got 
SQL_XQMZQAMSETXZLGIEEEEBUTFWF.T2

该文档声称对于可变数组和嵌套表应该可以进行此操作

member_condition 是一个成员条件,用于测试元素是否是嵌套表的成员。如果 expr 等于指定的嵌套表或可变数组的成员,则返回值为 TRUE。

我究竟做错了什么?

4

1 回答 1

0

这是一个文档错误,请参阅此AskTom 问题和答案

一种解决方法是运行此查询:

SELECT *
FROM t
WHERE EXISTS (
  SELECT 1 FROM TABLE(t2) WHERE column_value = 'abc'
)

我写了一篇博客文章,展示了所有多集条件和运算符的仿真,以防其他人发现这很有用。

于 2018-08-14T09:13:01.847 回答