当前位置: 首页 > 面试题库 >

在Oracle中插入后返回标识列的值

松烨烨
2023-03-14
问题内容

插入后如何在Oracle 12c中返回标识列(id)的值?似乎大多数方法都使用序列来获取插入项的ID。


问题答案:

只需使用 RETURNING 子句。

例如 -

RETURNING identity_id INTO variable_id;

测试用例 -

SQL> set serveroutput on
SQL> CREATE TABLE t
  2    (ID NUMBER GENERATED ALWAYS AS IDENTITY, text VARCHAR2(50)
  3    );

Table created.

SQL>
SQL> DECLARE
  2    var_id NUMBER;
  3  BEGIN
  4    INSERT INTO t
  5      (text
  6      ) VALUES
  7      ('test'
  8      ) RETURNING ID INTO var_id;
  9    DBMS_OUTPUT.PUT_LINE('ID returned is = '||var_id);
 10  END;
 11  /
ID returned is = 1

PL/SQL procedure successfully completed.

SQL>

SQL> select * from t;

        ID TEXT
---------- --------------------------------------------
         1 test

SQL>


 类似资料:
  • 问题内容: 在SQL Server中,是否可以使用存储过程在插入一些值的表中返回标识列的值?例如,如果我们在表中插入数据,则使用存储过程: 表TBL 用户ID整数,身份,自动递增 名称varchar 用户名varchar 密码varchar 因此,如果我运行存储过程插入一些值,例如: 我该如何返回此插入将发生的值。我需要其他一些操作的UserID值,有人可以解决吗? 问题答案:

  • 问题内容: 我正在尝试在INSERT语句之后找回键值。示例:我有一个带有属性名称和ID的表。id是一个生成的值。 现在,我想在同一步骤中重新获得ID。这是怎么做的? 我们正在使用Microsoft SQL Server 2008。 问题答案: 无需单独的SELECT … 这也适用于非IDENTITY列(例如GUID)

  • 我在postgres 12中有一个带有标识列(id)的表(表1)。表_1已经有数据,id列按顺序排列,如2、4、6、8、10等(偶数),最多1000个。现在从前端应用程序开始,我尝试输入数据,这些数据应该作为第1001条记录放在表中。我试图用以下两种方法创建序列,但没有成功。 它试图从1插入值,而不是从1001。对于奇数,将插入值,对于偶数,将引发以下错误错误:重复的键值违反了唯一约束pk_Tab

  • 问题内容: 我有这个: 有没有一种方法可以获取更新的列表作为结果,而不是就地更新原始列表? 问题答案: 我得到的最短信息:

  • 问题内容: 在SQL Server 2000或更高版本中,当使用如下语句时,是否有处理自动生成的主键(标识)列的方法? 我的目标是根本不使用列名。 问题答案: 默认情况下,如果你有一个标识列,你就 不会 需要在值部分指定它。如果您的表是: 然后,您可以执行以下操作: 这将为您自动生成ID,而您完全不必考虑它。如果您可以为ID列分配一个值。

  • 如何将从上述插入语句填充的标识值()插入到表(另一个表)中 任何人都可以解释一下我如何为更大的记录集(数千条记录)实现它? 我们可以使用循环和?如果是,请解释我们如何做到这一点? 如果我从选择查询插入到#test中,会是什么情况? 插入到#test(b,c)中从…(数千条记录)中选择 我如何捕获标识值并将该值用于另一个(#sample) insert into #sample(e,f) selec