DBMS_RANDOM似乎不起作用

时间:2015-01-12 10:36:32

标签: java sql eclipse oracle

我在这里仍然是相当新的Oracle SQL,但是我已经在网上搜索了能够从表中随机抽取一行并看到这样的代码。

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

这对我不起作用。显然,我确实更改了所有列和表名以匹配我自己的数据库,但它只是告诉我“ERROR 42X01:语法错误:遇到”WHERE“在第1行第58列。”

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

2 个答案:

答案 0 :(得分:1)

我不确定dbms_random.value may在使用额外的图层(例如jdbc)时无法正常工作。当您按<expression returning a number>it orders by the expression订购时,也不是&#34;列&#34;但是你想只显示一个值,我可以说两种方法:

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

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

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

答案 1 :(得分:0)

这不是Oracle数据库错误代码(它们以ORA-ERR-TNS-开头。它看起来像Derby错误代码。那么你使用错误的驱动程序来访问你的oracle数据库,或者你实际上是指JavaDB与“Oracle数据库”?我猜这个语法对Derby / JavaDB无效。

根据this answer,以下语法可行:

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