Oracle SQL连接时

迈克·戈兰

我遇到这样的主从情况:标头的详细信息:

pk | desc | quantity | fkHeader
1  | AA   | 10       |  1
2  | BB   | -50      |  1
3  | CC   | 25       |  1

我需要先提取数量为负的行,然后提取数量为正的行,所以我想使用游标并将其符​​号号('+'o'-')传递给它

像这样的东西

cursor rec (p_sign in char) is
  select * 
    from details
   where (case when p_sign = '+' then quantity > 0 else quantity < 0 end)

并得到这样的东西

(带“ +”号的记录)

1 | AA | 10 | 1
3 | CC | 25 | 1

(带“-”的记录)

2 | BB | -50 | 1

但这当然行不通..无法提取打开参数值的行

有没有一种方法可以将情况用作条件(或JOIN),或者我需要两个单独的游标?

谢谢

内维尔

您的过程解决方案(传递变量)不是解决此问题的最佳方法,但是要专门回答有关我在此处编写的proc中包含的SQL的问题。同样,最终,针对您的实际问题的更好解决方案是使用正确顺序排序的单个sql语句。

您不能在case表达式中返回条件。相反,您将需要在这里变得有些棘手:

WHERE CASE WHEN p_sign='+' THEN quantity ELSE quantity * -1 END < 0

但是,如果您使用@jarlh在注释中建议的and/or逻辑,则将更加清楚

WHERE ((p_sign='+' AND quantity > 0) OR (p_sign<>'+' AND quantity < 0))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章