中易网

oracle中如何获得某个表的正在或曾经使用的sequence?

答案:2  悬赏:0  
解决时间 2021-03-08 08:40
设oracle中有两个sequence分别为myseq1和myseq2.
某个表test(id number primary key,name varchar2(20));
test中的id字段是用myseq1生成的.
试问:我如何查到test表id字段使用的是myseq1而不是myseq2?
最佳答案
好象它们两者没有依属联系,而确实在工作中又容易遇见此类问题.
从序列的角度来思考的话,仅跟用户相关。
以下步骤可以参考:
1 从系统视图中取得所有序列的相关信息。
注意相关权限。
select sequence_name,min_value,max_value,increment_by,last_number from all_sequences
如果能够能够排除 用户A的表数据,采用了用户B的sequence来生成数据的情况,那可以加上
where sequence_owner=' '; -----适合的用户
或者从USER_SEQUENCES中提取。
2 从关心的表中提取敏感字段的最大值
select max(id) from test;
3 将两者对比。或者将上述两个查询连接到一起来查询。如果当前该表没有被插入,并且,近期没有被删除,那么,该max(id)+1=last_number ;
如果非要弄清楚的话,那就将表数据保护起来,拒绝删除数据,当发现数据插入后,观察插入的频度和事务提交后序列列值变化的大小,由此最终能判断出是哪个序列号。基于非要准确的搞清楚的前提下,使用排出法,将上述最接近的序列按照从轻度怀疑到高度怀疑的顺序,再备份的情况下,依次删除、恢复.....这样肯定能搞准。

还有一个最好的办法以后遇到这种情况就简单了。在该表上建立基于插入后的触发器,在触发器中包含上面查询思想,将max(id)+1=last_number 的序列名返回。。。。则绝对不会错
.
知识有限,在此也期盼能学习到更高级的方法。
希望能帮到你。.
全部回答
你这个其实挺复杂的,要建立一系列的东西来满足你这个需求   给你做个实验吧   先建立一个表 create table test (id varchar2(20) not null primary key , name varchar2(100)); 创建一个序列 create sequence seqtest  increment by 1  start with 1  maxvalue 999 nocycle  cache 10;  创建一个存储过程,这个很重要,每天半夜12点执行一次,这个主要是把序列重新置0用的,然后还需要定义一个job来调用这个存储过程 create or replace procedure p_seq as n number(10); v_sql varchar2(100); begin select seqtest.nextval into n from dual; n:=-(n-1); v_sql:='alter sequence seqtest increment by'|| n; execute immediate v_sql; select seqtest.nextval into n from dual; v_sql:='alter sequence seqtest increment by 1'; execute immediate v_sql; end;  然后创建一个触发器 create or replace trigger t_test        before insert on test        for each row        begin        select to_char(sysdate,'yyyymmdd')||'_'||lpad(seqtest.nextval,3,0) into :new.id from dual;      end ; 存储过程我没测试,但是编译能过去 现在做个试验 执行这样一个语句 insert into test(name) values ('aa'); 然后你检查下数据,然后继续插入再看看 select * from test;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
市场营销工作都负责什么?
G205/Y168(路口)我想知道这个在什么地方
永旺陶瓷水暖怎么去啊,有知道地址的么
我是青海的考生考了356分能上什么学校
皇岗村幼儿园地址有知道的么?有点事想过去
女朋友家不同意,我们和平分手了,我送她戒指
鼠标键盘卡死
怎样取个好的微信个性签名
并架齐驱四匹马(打一个字)
盐城市实验小学这个地址在什么地方,我要处理
关于远期收汇核销和退税的问题?
感谢院领导为护士解决医患纠纷怎么写
宜宾江北到新三中乘几路车
中国邮政集团公司昭通市分公司地址在哪,我要
能再发一下新版泡沫之夏的百度云吗?谢谢了
推荐资讯
泡葡萄酒发酵完捞渣之后需要密封吗
凡人修仙传,韩立在哪集遇到大眼神君的?
怎么样找出CAD里的TS工具栏
习水麻将软件
若关于x的方程(x+1)/(x的平方-x)-1/3x=x+k/
瑞倪维儿美容连锁机构(下邾店)地址有知道的么
马鞍山成宏机械制造有限公司在哪里啊,我有事
我家的猫咪1岁大,今天突然口吐白沫,食欲不
魔兽争霸谁才称得上真正的亡灵领袖?
93年的天蝎座男生和93年女生什么座相配
如何能够训练出大块且饱满的腹肌
刚买的u盘里面全是文件夹样子的exe文件 。听
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?