我有一个返回 50 个结果的选择查询。选择查询返回 id 。
下一部分我需要运行一个选择查询所有 50 个 id 的值。
请有人告诉我完成它的最佳方法是什么。使用 for 循环是个好主意,例如
begin
declare @count= select id from table1
for 1 to @count ..loop
select value from table2 where id =1
end loop
我可以使用游标什么是最好的方法。
我有一个返回 50 个结果的选择查询。选择查询返回 id 。
下一部分我需要运行一个选择查询所有 50 个 id 的值。
请有人告诉我完成它的最佳方法是什么。使用 for 循环是个好主意,例如
begin
declare @count= select id from table1
for 1 to @count ..loop
select value from table2 where id =1
end loop
我可以使用游标什么是最好的方法。
请详细说明此语句“下一部分我需要运行一个选择查询所有 50 个 ID 的值。” 但是,如果您想在 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 的值。
在您建议的简单情况下,我认为构建值集合然后遍历它们以从第二个表中获取数据是一个坏主意。最好使用 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;
分享和享受。
下面给出的可能是很好的方式
declare
cursor c1 is select value from table2 where id in (select id from table1)
begin
for i in c1
loop
...
...
end loop;
end;