1
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) 中使用我的数组?

4

2 回答 2

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 查询中使用它。

于 2013-08-20T08:38:43.283 回答
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
*/
于 2013-08-20T08:31:14.680 回答