【发布时间】:2012-01-04 00:56:20
【问题描述】:
我想在一个过程中返回多个游标,一个基于另一个。
我目前的代码是:
TYPE REFCURSOR IS REF CURSOR;
PROCEDURE GETCARS(oCARS OUT REFCURSOR)
BEGIN
OPEN oCARS FOR SELECT * FROM CARS;
END GETCARS;
我不确定这是否可行,但我想做类似的东西:
PROCEDURE GETCARS(oCARS OUT REFCURSOR, oREPAIRS OUT REFCURSOR)
BEGIN
OPEN oCARS FOR SELECT * FROM CARS;
..??..
END GETCARS;
它将作为第二个参数返回与当前获取的 oCARS 行相关的所有修复。 (Table repairs 有一个来自汽车的 id_car 的 FK)
现在我在 C# 端执行此操作,当我从 oCARS 游标中获取一行时,我调用第二个程序,它会为我提供修复列表,但也许有可能在一个程序中做到这一点(这会给我带来性能提升?-我不想使用 join,因为它每次维修都会返回成倍的汽车)
【问题讨论】:
-
为什么没有 2 个程序(getcars 和 getrepairs)?或者更好的是,只需在需要时选择所需的内容:select * from cars 而不是 exec getcars()
-
调用平面选择不如调用参数化过程安全(sql注入保护)。我认为调用 2 个程序的效率较低.. 我希望在这里获得其他人的一些经验..
-
调用正确参数化的选择语句并不比调用过程安全。只要不将参数值连接到 select 语句中,就没有 SQL 注入的向量。