关于如何实现这一目标,您有多种选择.
如果要使用集合,则可以使用TABLE函数从中进行选择,但您使用的集合类型变得很重要.
举一个简短的例子,这会创建一个数字表格的数据库类型:
CREATE TYPE number_tab AS TABLE OF NUMBER
/
Type created.
然后下一个块填充集合并使用它作为表执行基本选择,并将其连接到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);
还有其他方法可以做到这一点,但第一种可能最适合您的需求.
希望这可以帮助.