sql - 检索 Oracle 最后插入的 IDENTITY

标签 sql oracle primary-key

从 Oracle 12c 开始,我们可以使用 IDENTITY 字段。

有没有办法检索最后插入的身份(即 select @@identityselect LAST_INSERTED_ID() 等等)?

最佳答案

嗯。 Oracle 对 12c 中的 IDENTITY 功能使用序列和默认值。因此,您需要了解问题的序列。

首先创建一个测试身份表。

CREATE TABLE IDENTITY_TEST_TABLE
(
  ID NUMBER GENERATED ALWAYS AS IDENTITY 
, NAME VARCHAR2(30 BYTE) 
);

首先,让我们找到使用此标识列创建的序列名称。此序列名称是表中的默认值。
Select TABLE_NAME, COLUMN_NAME, DATA_DEFAULT from USER_TAB_COLUMNS
where TABLE_NAME = 'IDENTITY_TEST_TABLE';

对我来说,这个值是“ISEQ$$_193606”

插入一些值。
INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('atilla');
INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('aydın');

然后插入值并找到身份。
INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('atilla');
 SELECT "ISEQ$$_193606".currval from dual; 

你应该看到你的身份值(value)。如果你想在一个块中使用
declare
   s2 number;
 begin
   INSERT INTO IDENTITY_TEST_TABLE (name) VALUES ('atilla') returning ID into s2;
   dbms_output.put_line(s2);
 end;

最后一个 ID 是我的身份列名称。

关于sql - 检索 Oracle 最后插入的 IDENTITY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811283/

相关文章:

sql - Access SQL 根据条件从组中选择最新记录

SQL 慢速空间数据

java - 有状态的 pl/sql 包是如何定义的?

sql - Oracle SQL - 用以前的已知值替换空值

mysql - 在 MYSQL 中将列从 CHAR(18) 更改为 CHAR(36)

java - 防止 hibernate 按列值重复行

java - Hibernate内部连接非主键

sql - 根据现有列派生其他列

sql - Listagg 分区而不是 Group By

sql - 如何执行 SQL 游标转换