sql - 如何知道当用户向表中插入一条新记录时,是否自动生成了表示表主键的字段值?

标签 sql database oracle oracle11g oracle-sqldeveloper

我不是很喜欢数据库,我有以下疑问。

我正在使用 Oracle SQL Developer 作为“IDE”来处理 Oracle 数据库。

在这里,我可以检查一个名为 coda_rx 的表,其中包含一些字段。其中一个字段名为 PK_CODA(它是第一个),我认为它代表了该表的主键。它不是 nullabe(并且此特征必须是主键)。

我的问题是:当用户向我的 coda_rx 表中插入一条新记录时,如何检查该字段的值是否自动生成?

谢谢

最佳答案

要确认该列是否是表的主键,您可以加入 USER_CONSTRAINTSUSER_CONS_COLUMNS View 。

SELECT a.table_name,
  a.constraint_type,
  b.constraint_name,
  b.column_name
FROM user_constraints a,
  user_cons_columns b
WHERE a.owner= b.owner
AND a.table_name = b.table_name
AND a.constraint_name = b.constraint_name
AND a.table_name   =UPPER('coda_rx')
AND a.constraint_type='P';

现在,有两种方法可以自动填充列:

  • 标识列在12c中引入
  • 触发器序列

如果它是标识列,那么您可以查询all_tab_identity_cols View :

SELECT table_name,
  column_name,
  generation_type,
  identity_options
FROM user_tab_identity_cols
WHERE table_name = UPPER('coda_rx')
ORDER BY 1,
  2

如果表上有触发器使用序列填充列,您可以查询user_triggers View :

SELECT trigger_name, 
       table_name, 
       column_name 
FROM user_triggers;

SQL Developer 中甚至更容易:

  1. 打开对象浏览器
  2. 单击并展开表格
  3. 单击并展开所需的表格
  4. 双击列名
  5. 它将打开表格 View
  6. 点击约束触发器标签

有关这两个功能的更多详细信息,请阅读:

关于sql - 如何知道当用户向表中插入一条新记录时,是否自动生成了表示表主键的字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345659/

相关文章:

MySQL 8使用密码创建新用户不起作用

sql - 如何在 BigQuery 标准 SQL 中对数组进行排序?

mysql - NodeJs Mysql错误: ER_PARSE_ERROR Insert to multiple table

database - 我可以使用音乐基因组计划吗?

mysql - Union在mysql中与group by一起使用时不起作用?怎么了?

sql - Oracle:将毫秒添加到我的时间戳对象

php - 如何基于JOIN查询不重复表列?

database - PostgreSQL 10 无法在 Linux 的 Windows 子系统上运行的 Ubuntu 18.04 上启动

sql - 如何从基于对象的表查询中返回对象

android - 如何减少我的 MAF 应用程序的内存大小