我有一个select查询,返回50个结果。 select查询返回id。
下一部分我需要为所有50个ID运行一个select查询值。
请有人告诉我完成这项工作的最佳方法是什么。 正在使用for循环一个好主意 e.g。
begin
declare @count= select id from table1
for 1 to @count ..loop
select value from table2 where id =1
end loop
我可以使用游标什么是最好的方法。
答案 0 :(得分:4)
请详细说明这句话“下一部分我需要为所有50个ID运行一个select查询值。” 但是,如果要在pl / sql块中获取这50条记录并以某种方式操作它们,则需要一个游标。可以使用和不使用FOR循环来获取游标中的记录。
光标示例:
declare
cursor c1 is select col1 from table1;
begin
for a in c1
loop
dbms_output.put_line(a.col1);
end loop;
end;
当服务器输出打开时,上面的代码将显示col1中的值。
答案 1 :(得分:3)
在一个简单的例子中,你建议我认为建立一个值集合然后迭代它们以从第二个表中获取数据是一个坏主意。使用JOIN是一个更好的主意,根据你所获得的标准,将两个表中的数据连接在一起。在这种情况下,您似乎从TABLE1中选择了一个ID值,该值也在TABLE2上。因此,您可能会考虑以下内容:
FOR myRow IN (SELECT t1.ID, t2.VALUE
FROM TABLE1 t1
INNER JOIN TABLE2 t2
ON (t2.ID = t1.ID))
LOOP
-- Do something useful with the data
DBMS_OUTPUT.PUT_LINE('t1.ID=' || myRow.ID || ' t2.VALUE=' || t2.VALUE);
END LOOP;
分享并享受。
答案 2 :(得分:0)
下面给出了ep>的一个好方法
declare
cursor c1 is select value from table2 where id in (select id from table1)
begin
for i in c1
loop
...
...
end loop;
end;