我的数据库知识非常有限,我正在尝试使用以下查询删除行:
从表中删除 WHERE column in(select sequence .CURRVAL FROM DUAL);
在Maven中运行集成测试后,在.sql中使用它来清理数据库。我用Google搜索了它,但仍未找到删除语句的答案。任何帮助表示赞赏!
答案 0 :(得分:4)
你不能在DELETE语句中使用CURRVAL,你可以在这里阅读:http://www.orafaq.com/wiki/ORA-02287
但是,由于您使用的是SQL脚本,因此可以在SQL * Plus中执行此操作:
SQL> create table t( id number);
Table created.
SQL> create sequence seq;
Sequence created.
SQL> insert into t (id) values (seq.nextval);
1 row created.
SQL> column i new_value curseqval
SQL> select seq.currval i from dual;
I
----------
1
1 row selected.
SQL> delete from t where id = &curseqval;
old 1: delete from t where id = &curseqval
new 1: delete from t where id = 1
1 row deleted.
的问候,
罗布。
答案 1 :(得分:2)
1)来自DUAL的sequence.CURRVAL是单个离散值;使用IN是不合适的
2)因为你引用 sequence .CURRVAL你不需要使用子查询,你可以直接访问这个值。
尝试:
DELETE FROM table WHERE column = sequence.CURRVAL;
假设序列被用作主键(某处),这将导致删除最近插入的键记录,或者如果列是外键,那么只有那些记录与最近的记录有关。
<强>糟糕... 强> 我做了足够的删除查询,我没有检查我的工作。虽然我从未想过在删除中使用序列值,但我从未想过你无法这样做。
然而,这将起作用:declare del_key number;
begin
select seq_so_test.currval into del_key from dual;
delete from t_so_test where id = del_key;
end;