首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除语句的ORA-00907

删除语句的ORA-00907
EN

Stack Overflow用户
提问于 2018-04-18 23:46:56
回答 2查看 302关注 0票数 0

我试图从一个表中删除一个随机记录,但是我得到了一个ORA-00907:缺少右括号错误,并且找不到出了什么问题。

以下是我的声明:

代码语言:javascript
复制
DELETE FROM participation WHERE ROWID IN (
    SELECT ROWID FROM participation
        WHERE ROWNUM = 1
        ORDER BY DBMS_RANDOM.RANDOM);

这张桌子:

代码语言:javascript
复制
CREATE TABLE participation (
    matrEmp     NUMBER(4)     NOT NULL,
    codeProj     VARCHAR(14)   NOT NULL,
    fonction VARCHAR2(255) NOT NULL,
    CONSTRAINT pk_part PRIMARY KEY (matrEmp, codeProj)
);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-19 07:04:21

ROWNUM在使用数据之前对数据进行过滤,这样它就不能工作了。对于旧版本,您可以选择一个随机pk,

代码语言:javascript
复制
DELETE FROM participation s3
WHERE (s3.matrEmp, s3.codeProj) IN (SELECT s2.matrEmp,
                                         s2.codeProj
                                    FROM (SELECT RANK() over(ORDER BY DBMS_RANDOM.value) random_rank,
                                                 s1.matrEmp,
                                                 s1.codeProj
                                            FROM participation s1) s2
                                   WHERE random_rank = 1)

如果使用Oracle 12c,则可以使用行限制。

代码语言:javascript
复制
DELETE FROM participation s3
 WHERE (s3.matrEmp, s3.codeProj) IN (SELECT s1.matrEmp,
                                        s1.codeProj
                                   FROM participation s1
                                  ORDER BY DBMS_RANDOM.value 
                                  FETCH FIRST 1 ROWS ONLY);
票数 1
EN

Stack Overflow用户

发布于 2018-04-19 06:28:23

也许是这样的?不太优雅,但--据我所能测试--似乎正在起作用。测试表是Scott的EMP表的副本。

代码语言:javascript
复制
delete from test s
  where s.empno = (select r.empno 
                   from (select t.empno, row_number() over (order by t.empno) rn
                         from test t
                        ) r
                   where r.rn = (select round(dbms_random.value(1, m.cnt))
                                 from (select count(*) cnt 
                                       from test e
                                      ) m
                                )
                  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49910617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档