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 に答える