我试图弄清楚Oracle中的列是否从序列中填充.我对Oracle如何处理排序的印象是序列和列是独立的实体,需要手动插入下一个序列值,如:
insert into tbl1 values(someseq.nextval, 'test')
Run Code Online (Sandbox Code Playgroud)
或者把它放到一个表触发器中.这意味着判断列是否从序列中填充是非常重要的.那是对的吗?关于如何确定列是否从序列中填充的任何想法?
Jon*_*ler 21
你是对的; 序列与表分开,单个序列可用于填充任何表,并且某些表中列中的值可能主要来自序列(或序列集),但手动生成的值除外.
换句话说,列和序列之间没有强制连接 - 因此无法从模式中发现这种关系.
最终,分析将是在表中插入或更新数据的所有应用程序的源代码.没有其他保证.如果存储过程是对表进行修改的唯一方法,或者存在设置值或其他此类事物的触发器,则可以缩小搜索范围.但一般的解决方案是"分析来源"的"非解决方案".
APC*_*APC 12
如果在触发器中使用序列,则可以找到它填充的表:
SQL> select t.table_name, d.referenced_name as sequence_name
2 from user_triggers t
3 join user_dependencies d
4 on d.name = t.trigger_name
5 where d.referenced_type = 'SEQUENCE'
6 and d.type = 'TRIGGER'
7 /
TABLE_NAME SEQUENCE_NAME
------------------------------ ------------------------------
EMP EMPNO_SEQ
SQL>
Run Code Online (Sandbox Code Playgroud)
您可以改变此查询以查找使用序列的存储过程等.