ORA-00907 关于删除语句
ORA-00907 On a delete statement
我试图从 table 中删除一条随机记录,但我收到 ORA-00907: 缺少右括号 错误,我无法找到是什么错了。
这是我的声明:
DELETE FROM participation WHERE ROWID IN (
SELECT ROWID FROM participation
WHERE ROWNUM = 1
ORDER BY DBMS_RANDOM.RANDOM);
这里是 table:
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)
);
也许是这样的?不是很优雅,但是——据我测试——似乎在工作。 TEST table 是 Scott 的 EMP table.
的副本
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
)
);
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);
我试图从 table 中删除一条随机记录,但我收到 ORA-00907: 缺少右括号 错误,我无法找到是什么错了。
这是我的声明:
DELETE FROM participation WHERE ROWID IN (
SELECT ROWID FROM participation
WHERE ROWNUM = 1
ORDER BY DBMS_RANDOM.RANDOM);
这里是 table:
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)
);
也许是这样的?不是很优雅,但是——据我测试——似乎在工作。 TEST table 是 Scott 的 EMP table.
的副本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
)
);
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);