如何在 Oracle SQL SELECT 语句中获取 N 行给定数字?
How do I get N rows in Oracle SQL SELECT statement given number by variable?
在 Oracle SQL 中,我有一个变量是要获取的行数,我只能使用 SQL SELECT 语句,所以没有 PL/SQL 块.
如果变量设置了值,我必须获取变量中的行数,如果没有,则获取尽可能多的行(无限)。
我试过:
select * from system_options
THEN FETCH FIRST
CASE :lim
THEN :lim
ELSE 9999
END
ROWS ONLY
这给了我 ORA-00933: SQL command not properly ended
.
另一种选择是不设置变量,然后不使用 THEN FETCH
语句。
您有几个语法错误:
- 您不需要
FETCH FIRST
之前的 THEN
;和
CASE
表达式缺少 WHEN
子句。
我没有 SQL/Plus 可以使用绑定变量进行测试,但是像这样:
select * from system_options
FETCH FIRST CASE WHEN :lim IS NOT NULL THEN :lim ELSE 9999 END ROWS ONLY
或者,您可以使用 COALESCE
:
select * from system_options
FETCH FIRST COALESCE( :lim, 9999 ) ROWS ONLY
db<>fiddle here
在 Oracle SQL 中,我有一个变量是要获取的行数,我只能使用 SQL SELECT 语句,所以没有 PL/SQL 块.
如果变量设置了值,我必须获取变量中的行数,如果没有,则获取尽可能多的行(无限)。
我试过:
select * from system_options
THEN FETCH FIRST
CASE :lim
THEN :lim
ELSE 9999
END
ROWS ONLY
这给了我 ORA-00933: SQL command not properly ended
.
另一种选择是不设置变量,然后不使用 THEN FETCH
语句。
您有几个语法错误:
- 您不需要
FETCH FIRST
之前的THEN
;和 CASE
表达式缺少WHEN
子句。
我没有 SQL/Plus 可以使用绑定变量进行测试,但是像这样:
select * from system_options
FETCH FIRST CASE WHEN :lim IS NOT NULL THEN :lim ELSE 9999 END ROWS ONLY
或者,您可以使用 COALESCE
:
select * from system_options
FETCH FIRST COALESCE( :lim, 9999 ) ROWS ONLY
db<>fiddle here