Oracle使用序列号删除行

时间:2011-05-11 13:36:59

标签: oracle row sequence delete-row sql-delete

我的数据库知识非常有限,我正在尝试使用以下查询删除行:

表中删除 WHERE column in(select sequence .CURRVAL FROM DUAL);

在Maven中运行集成测试后,在.sql中使用它来清理数据库。我用Google搜索了它,但仍未找到删除语句的答案。任何帮助表示赞赏!

2 个答案:

答案 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;