PL/SQL否定"成员"集合并不否定

Mic*_*ang 2 oracle plsql oracle11g

我有一个包含空元素的PL/SQL集合(在最小的工作示例中它只是那个,但行为与其他元素相同).当我现在查询此集合是否具有特定数字作为元素时,它将false按预期返回.但事实是,否定查询也会产生答案false.

任何人都可以证实这种行为或指导我在这里失败的假设吗?

DECLARE
  TYPE number_t IS TABLE OF NUMBER;
  nt1 number_t := number_t();
BEGIN
  nt1.extend();
  dbms_output.put_line('Start');        -- prints 'Start'
  IF 1 member of nt1 THEN
    dbms_output.put_line('Member');     -- does not execute
  END IF;
  IF not 1 member of nt1 THEN
    dbms_output.put_line('Not member'); -- does not execute
  END IF;
  IF not (1 member of nt1) THEN
    dbms_output.put_line('Not member'); -- does not execute
  END IF;
END;
Run Code Online (Sandbox Code Playgroud)

观察:Oracle数据库11g企业版11.2.0.4.0版 - 64位

尚未在其他安装上测试过.

mus*_*cio 5

根据Oracle文档," EXTEND将一个null元素附加到集合","[ MEMBER运算符] 的返回值是TRUEif expr等于指定嵌套表的成员"

将任何值与null进行比较都会产生UNKNOWN结果,因此条件既不是也不TRUEFALSE,因此THEN块永远不会被执行.

参考文献:

  1. http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems006.htm

  2. http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions006.htm