對於如何實現這一點,您有幾種選擇。
如果你想使用一個集合,那麼你可以使用TABLE函數從中進行選擇,但是你使用的集合的類型變得很重要。
爲一個簡單的例子,這將創建一個數據庫類型是數字表:
CREATE TYPE number_tab AS TABLE OF NUMBER
/
創建的類型。
下一塊,然後填充的收集和使用它作爲一個表,並將其加入到EMP
表(有一些輸出,所以你可以看到發生了什麼),從它執行一個基本的選擇:
DECLARE
-- Create a variable and initialise it
v_num_tab number_tab := number_tab();
--
-- This is a collection for showing the output
TYPE v_emp_tabtype IS TABLE OF emp%ROWTYPE
INDEX BY PLS_INTEGER;
v_emp_tab v_emp_tabtype;
BEGIN
-- Populate the number_tab collection
v_num_tab.extend(2);
v_num_tab(1) := 7788;
v_num_tab(2) := 7902;
--
-- Show output to prove it is populated
FOR i IN 1 .. v_num_tab.COUNT
LOOP
dbms_output.put_line(v_num_tab(i));
END LOOP;
--
-- Perform a select using the collection as a table
SELECT e.*
BULK COLLECT INTO v_emp_tab
FROM emp e
INNER JOIN TABLE(v_num_tab) nt
ON (e.empno = nt.column_value);
--
-- Display the select output
FOR i IN 1 .. v_emp_tab.COUNT
LOOP
dbms_output.put_line(v_emp_tab(i).empno||' is a '||v_emp_tab(i).job);
END LOOP;
END;
您可以從中看到數據庫TYPE集合(number_tab)被視爲一個表,並可以像這樣使用。
另一種選擇是簡單地加入你選擇你的兩個表從你的例子:
SELECT tt.*
FROM table_two tt
INNER JOIN table_one to
ON (to.item = tt.cid);
有這樣做的其他方式,但第一可能滿足您的需求最好的。
希望這會有所幫助。
啊。這工作完美。我將該變量作爲我的類型進行投射,然後加入,並且出現錯誤。更好的是直接加入表格的選項......我做了很多動態SQL,並且陷入了這個事情的流程中,並完全錯過了明顯的表現。非常感謝! – zmouser
很高興幫助解決問題。 – Ollie