加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 在表中添加和删除时使用序列

发布时间:2020-12-12 16:26:02 所属栏目:百科 来源:网络整理
导读:我正在创建一个表格,我将添加文件名和许多其他字段.我使用fileid列按顺序表示文件;即,要上传的第一个文件应具有fieldid 1,然后下一个文件将具有fileid 2,依此类推.我用了一个序列和触发器: create sequence create_file_id start with 1 increment by 1 noc
我正在创建一个表格,我将添加文件名和许多其他字段.我使用fileid列按顺序表示文件;即,要上传的第一个文件应具有fieldid 1,然后下一个文件将具有fileid 2,依此类推.我用了一个序列和触发器:
create sequence create_file_id start with 1 increment by 1 nocache;

触发器是:

before insert on add_files_details
for each row
begin
select create_file_id.nextval into :new.file_id from dual;
end;

但是,如果从表中删除任何记录/记录,则序列会混乱.所以,我正在考虑使用另一个带触发器的序列来减少前一个序列的值,删除的行数.但是我坚持实现这个序列的触发器.

序列:

create sequence del_file_id increment by -1 nocache;

有没有实现这个目标?

您可以让序列执行主键作业并创建基表的视图,然后选择

rownum作为要按顺序查看从1到N的数字的列:

SQL> create table your_table(
  2    tab_id number primary key,3    col    number
  4  )
  5  ;

Table created

SQL> create sequence gen_id;

Sequence created

SQL> create trigger TR_PK_your_table
  2  before insert on your_table
  3  for each row
  4  begin
  5    :new.tab_id := gen_id.nextval; -- This kind of assignment is allowed in 11g  
  6  end;                             -- and higher,in version prior to 11g 
  7  /                                -- conventional select statement is used

Trigger created

SQL> insert into your_table(col)
  2  select level 
  3    from dual
  4  connect by level <=7;

7 rows inserted

SQL> commit;

Commit complete

SQL> select *
  2    from your_table;

    TAB_ID        COL
---------- ----------
         1          1
         2          2
         3          3
         4          4
         5          5
         6          6
         7          7

7 rows selected

SQL> create or replace view V_your_table
  2  as
  3  select tab_id
  4,col
  5,rownum as num
  6    from your_table
  7  ;

View created

SQL> select *
  2    from v_your_table;

    TAB_ID        COL        NUM
---------- ---------- ----------
         1          1          1
         2          2          2
         3          3          3
         4          4          4
         5          5          5
         6          6          6
         7          7          7

7 rows selected

SQL> delete from your_table where tab_id in (3,5,6);

3 rows deleted

SQL> commit;

Commit complete

SQL> select *
  2    from your_table;

    TAB_ID        COL
---------- ----------
         1          1
         2          2
         4          4
         7          7

SQL> select *
  2    from v_your_table;

    TAB_ID        COL        NUM
---------- ---------- ----------
         1          1          1
         2          2          2
         4          4          3
         7          7          4

SQL>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读