在sql语句中选择forall数组(PL / SQL)

时间:2013-08-20 08:16:52

标签: sql plsql

Type tabArray IS TABLE OF TABLE%ROWTYPE;

tableArray tabArray ; 

--fill array 

SELECT * 
  BULK COLLECT INTO tableArray 
  FROM TABLE
 WHERE TABLE.field = ....

--work

FOR pos IN 1..tableArray .count 
LOOP 
  dbms_output.put_line(pos||' '||audArray(pos).field); 
end loop;

--doesn't work

SELECT * TABLE2
  WHERE TABLE2.field in (SELECT filed FROM FORALL tableArray );

主要问题:如何在sql语句(in)中使用我的数组?

2 个答案:

答案 0 :(得分:1)

首先,您必须在SQL中创建一个类型,然后可以使用下面给出的

 CREATE TYPE FRUIT_TT AS TABLE OF VARCHAR2(100)

SELECT column_value AS val
FROM   TABLE(FRUIT_TT('Apple','Banana','Apricot'))
WHERE  column_value NOT LIKE 'A%';

这里创建了一个类型FRUIT_TT,并在SQL查询中使用它。

答案 1 :(得分:0)

以下是一个示例,您只需要调整SQL语句。

CREATE TYPE col_ntt IS TABLE OF NUMBER;

CREATE TABLE num_tab
(
    col NUMBER
);

INSERT INTO num_tab VALUES(1);
INSERT INTO num_tab VALUES(2);
INSERT INTO num_tab VALUES(4);

DECLARE
    l_col1  col_ntt := col_ntt(1, 2, 3);
    l_col2  col_ntt;
BEGIN
    SELECT  *
    BULK    COLLECT INTO l_col2
    FROM    num_tab
    WHERE   col IN (SELECT column_value FROM TABLE(l_col1));

    FOR indx IN 1..l_col2.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(l_col2(indx));
    END LOOP;
END;
/*
1
2
*/