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
我得到了相当大的 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