DBMS_RANDOM 好像不行

DBMS_RANDOM doesn't seem to work

我对这里的 Oracle SQL 还很陌生,但我已经在互联网上搜索过,以便能够从 table 中随机拉出一行,并看到了这样的代码。

firstNameGen = connection.prepareStatement(
    "SELECT firstName "
        +"FROM (SELECT firstName "
        +"FROM firstNames "
        +"ORDER BY dbms_random.value) "
    +"WHERE ROWNUM = 1");

它对我不起作用。显然,我确实更改了所有列和 table 名称以匹配我自己的数据库,但它只是告诉我 "ERROR 42X01: Syntax error: Encountered "WHERE" 在第 1 行,第 58 列。"

我在 Eclipse 中工作。我需要导入功能才能使用 dbms_random 还是我只是遗漏了什么?任何帮助将不胜感激。

我不确定,但是使用 dbms_random.value may 排序在使用额外层时无法正常工作,例如 jdbc。同样,当您按 <expression returning a number>it orders by the expression 而不是 "column" 订购时,但是您只想显示一个值,我可以说两种替代方式:

  1. 只需将 dbms_random.value 作为列添加到查询中并按其排序。

    select * from (select
      firstName 
      , dbms_random.value as ran
    from firstNames
    order by ran)
    where rownum=1;
    
  2. 使用示例()

    select firstName
    from firstNames sample (1)
    where rownum =1;
    

这不是 Oracle DB 错误代码(它们以 ORA-ERR-TNS- 开头)。它看起来确实像 Derby 错误代码。那么您是否使用了错误的驱动程序来访问您的 oracle 数据库,或者您实际上是指使用 "Oracle Database" 的 JavaDB?我猜语法对 Derby/JavaDB.

无效

根据 this answer,以下语法有效:

"SELECT firstName FROM firstNames ORDER BY RANDOM() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY"