如何在 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