Table Oracle 中的变量连接等价物

Table variable join equivalent in Oracle

我得到了相当大的 table My_Table 和一个用户定义的集合 Picture_Arr 作为输入,通常有 5-10 行声明为:

TYPE Picture_Rec IS RECORD (
     seq_no                         NUMBER,
     task_seq                       NUMBER); 
TYPE Picture_Arr IS TABLE OF Picture_Rec;

在 MS SQL 中,我通常会这样写:

DECLARE @Picture_Arr TABLE (seq_no INT, task_seq INT)
SELECT M.*
FROM My_Table M
INNER JOIN @Picture_Arr A
  ON M.seq_no = A.seq_no AND M.task_seq = A.task_seq

但是我不知道如何在 Oracle 中重写相同的代码,因为 Picture_Arr 不是 table。正如一些教程所说,我可以遍历 My_Table 并比较键,但它在 Oracle 中是否有效,或者是否有其他方法可以做到这一点?

也许这就是您要找的。理解想要的输出是什么,以及记录的数据是否存储在某处有点复杂

create type Picture_Rec as object(
seq_no                         NUMBER,
task_seq                       NUMBER); 
)
/

create type Picture_Tab as table of Picture_Rec
/

create or replace function get_picture_list
return Picture_Tab
is
  l_pic Picture_Tab;
begin
   select Picture_Rec ( seqno, taskseq )
   bulk collect into l_pic
   from your_table; -- the table you have these records
   return l_pic;
end;
/

那你运行

SELECT M.*
FROM My_Table M
JOIN TABLE ( get_picture_list() ) p 
  ON M.seq_no = p.seq_no AND M.task_seq = p.task_seq