oracle - 如何在 Oracle SQL 语句中使用集合

标签 oracle collections plsql

我想编写一个 Oracle 函数,该函数将多个步骤中的一些数据收集到一个集合变量中,并在 SELECT 查询中使用该集合数据,就像在这个非常简单的示例中一样:

CREATE OR REPLACE FUNCTION TESTFUNC01 RETURN VARCHAR2 AS 
  -- INT_LIST is declared globally as "TYPE INT_LIST IS TABLE OF INTEGER"
  MyList INT_LIST := INT_LIST();
  MyName VARCHAR2(512);
BEGIN
  MyList.Extend(3);
  MyList(0) := 1;
  MyList(1) := 2;
  MyList(2) := 3;

  SELECT Name INTO MyName
  FROM Item WHERE ItemId NOT IN MyList;
  RETURN MyName;
END TESTFUNC01;

不幸的是,“NOT IN MyList”部分不是有效的 SQL。有没有办法实现这一目标?

最佳答案

您正在寻找的是 table功能:

CREATE OR REPLACE FUNCTION TESTFUNC01 RETURN VARCHAR2 AS 
  -- INT_LIST is declared globally as "TYPE INT_LIST IS TABLE OF INTEGER"
  MyList INT_LIST := INT_LIST();
  MyName VARCHAR2(512);
BEGIN
  MyList.Extend(3);
  MyList(1) := 1;
  MyList(2) := 2;
  MyList(3) := 3;

  SELECT Name INTO MyName
  FROM Item WHERE ItemId NOT IN (select * from table(MyList));
  RETURN MyName;
END TESTFUNC01;

关于oracle - 如何在 Oracle SQL 语句中使用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569918/

相关文章:

java - 比较两个非常大的列表的最佳方法

Java从ArrayList中删除整数的正确方法

java - 如何将 List<> 传递给 Oracle 存储过程

sql - 什么时候应该使用数据库同义词?

Oracle 高级队列 - 出队不起作用

sql - Oracle MERGE 死锁

database - 如何解析ORA-011033 : ORACLE initialization or shutdown in progress

java - 如何按正确顺序将 LinkedHashMap 值转换为 ArrayList/Array?

oracle - 0x80040e51 描述 : "Provider cannot derive parameter information and SetParameterInfo has not been called."

sql - 如何将一个表中的多个值插入到另一个表中?