【问题标题】:How do I get N rows in Oracle SQL SELECT statement given number by variable?如何在给定数字的 Oracle SQL SELECT 语句中获取 N 行?
【发布时间】:2021-06-24 22:29:51
【问题描述】:

在 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 语句。

【问题讨论】:

标签: oracle select oracle19c


【解决方案1】:

您有几个语法错误:

  • 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小提琴here

【讨论】:

  • 使用COALESCE更好,谢谢!我虽然 Oracle 会为 max int 或其他东西设置一个常量,但是我必须输入一个数字。另外我不知道为什么在我的情况下我必须使用字符串,所以我必须使用'9999',否则我会收到此错误ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
  • @user5507535 如果您的绑定变量作为字符串传递,那么两种数据类型都需要相同,否则会报错。我假设您是从第 3 方应用程序(例如 Java、C# 或 Python)传递它;如果是这样,那么只需确保将其绑定为(或强制转换为)数字而不是字符串。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2020-01-05
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
相关资源
最近更新 更多