2013-08-20 32 views
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)中使用我的數組?在sql語句中選擇所有數組(PL/SQL)

回答

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 
*/ 
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查詢中使用它。