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

How can I know if a field value that represent the primary key of a table is automatically generated when the user insert a new record into the table?

我不是很了解数据库,我有以下疑问。

我正在使用 Oracle SQL Developer 作为 "IDE".

开发 Oracle 数据库

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

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

谢谢

要确认该列是否是table的主键,可以加入USER_CONSTRAINTSUSER_CONS_COLUMNS 次观看。

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 视图:

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

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

SELECT trigger_name, 
       table_name, 
       column_name 
FROM user_triggers;

SQL开发者中更简单:

  1. 打开对象浏览器
  2. 单击并展开表格
  3. 单击并展开所需的 table
  4. 双击列名称
  5. 它将打开 table 视图
  6. 单击约束触发器选项卡

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