我试图从一个表中删除一个随机记录,但是我得到了一个ORA-00907:缺少右括号错误,并且找不到出了什么问题。
以下是我的声明:
DELETE FROM participation WHERE ROWID IN (
SELECT ROWID FROM participation
WHERE ROWNUM = 1
ORDER BY DBMS_RANDOM.RANDOM);这张桌子:
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)
);发布于 2018-04-19 07:04:21
ROWNUM在使用数据之前对数据进行过滤,这样它就不能工作了。对于旧版本,您可以选择一个随机pk,
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,则可以使用行限制。
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);发布于 2018-04-19 06:28:23
也许是这样的?不太优雅,但--据我所能测试--似乎正在起作用。测试表是Scott的EMP表的副本。
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
)
);https://stackoverflow.com/questions/49910617
复制相似问题