我想编写一个 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/