oracle中如何判断某列是否为自增字段?
oracle中如何判断某列是否为自增字段?
How to find out if a column is an auto increment field in oracle?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
oracle中如何判断某列是否为自增字段?
How to find out if a column is an auto increment field in oracle?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
你不能。 Oracle 没有自动递增字段。
Oracle 支持序列,它们是用于生成数字的单独数据库对象。这些序列可以在 insert 语句或 before insert 触发器中使用,为新记录生成主键值。
字段本身只是普通字段,序列和字段之间没有任何关系。
因此,唯一的希望是解析触发器,看看是否可以找到使用序列填充触发器的证据。不过,这将是一项艰巨的工作,我怀疑你是否能让它足够可靠。毕竟,触发器可以触发一个返回值的函数,因此如果您想确定的话,您必须一路走下去。
You can't. Oracle doesn't have auto-increment fields.
Oracle supports sequences, which are separate database objects for generating numbers. These seuqences can be used in the insert statement or in a before insert trigger to generate a primary key value for the new record.
The fields themselves are just normal field and there is no relation between the sequence and the field.
So the only hope is to parse a trigger and see if you can find evidence of it being filled there using a sequence. That would be a tough job, though, and I doubt if you can make this reliable enough. After all, the trigger could fire a function which returns the value, so you have to go all the way if you want to be sure.
从 Oracle 12.1 开始,可以通过查看 DBA_TAB_COLUMS(或 USER_TAB_COLUMNS 或 ALL_TAB_COLUMNS)视图的“DATA_DEFAULT”列来识别标识列(具有自行生成的序列)。
它们看起来像“#OWNER”.“ISEQ$$_nnnnn”.nextval
As of Oracle 12.1 identity columns (with self generated sequences) can be identified by looking at the "DATA_DEFAULT" column of view DBA_TAB_COLUMS (or USER_TAB_COLUMNS or ALL_TAB_COLUMNS).
They will look like "#OWNER"."ISEQ$$_nnnnn".nextval