如何在Oracle SQL中用变量替换具体值?我有
select 5, min(id) from my_table where id > 5 --AND ..
UNION ALL
select 6, min(id) from my_table where id > 6 --AND ..
UNION ALL
....
| 5 | 6 |
| 6 | 8 |
...
如何将其包装在下面执行伪代码的函数中?
for ( $i in ( select id from my_table)){
UNION ALL
select $i, min(id) from my_table where id > $i
}
编辑:为了清楚起见,我正在寻找一种通用方法,将具有硬连线值的选择转换为接受变量的函数。请注意--AND
部分。
Edit2:
让我用Java翻译它。
问题:我有代码
System.out.println(1+2+" = 1+2"+ " ");
返回两个数字的和。如何用任何a
和b
替换具体的1 + 2?
答:
您需要定义
int getSum(int a, int b){ return a+b;}
现在您可以写
for(int a : setA){
for(int b : setB){
System.out.println(" " +a+"+"+b+" = "+ getSum(a,b)+" ");
}}
这样,您可以遍历setA
的所有元素和setB
的所有元素,而不必提供具体的值1和2。
我对SQL有完全相同的问题。如果我有一个查询返回一个具体值的结果的查询(Java示例:1
,2
; SQL示例:where id > 6
)-如何对其进行修改,以使SQL遍历所有可能的值值(通过从按ID分组的t中选择id获得)?
答案 0 :(得分:1)
您似乎想为每个ID获取下一个ID。只需使用lead
函数即可完成:
select
t.id,
lead(t.id) over (order by t.id) as next_id
from
my_table t
如果您确实想从函数中返回它,则可能需要一个返回自定义表类型的表函数,因为要返回的行类型与您的表结构不匹配,因此您不能使用{{1} }。
下面的代码段将创建这样的行类型和匹配的表类型,并返回与上面的查询相同的函数。最后几行包含相同的查询,现在使用函数而不是表:
my_table%rowtype
有关表函数的更多信息,我认为本教程/文章是一个好的开始:
http://stevenfeuersteinonplsql.blogspot.com/2015/04/table-functions-introduction-and.html