在 SQL 的 select 语句中使用 insert

Posted

技术标签:

【中文标题】在 SQL 的 select 语句中使用 insert【英文标题】:Using insert in a select statement in SQL 【发布时间】:2011-09-19 19:26:22 【问题描述】:

我有一个表格 person,其中包含 personID、firstName、lastName、DOB 和 sex 列。当我插入每条记录时,我会使用一个序列自动增加 personID 列。我插入的每条记录都需要该值,因为我必须在另一个查询中发送它。有什么方法可以在插入语句中使用 select 语句来检索值。我不能使用“where”,因为我接受其他列的重复项。因此,每个唯一的人仅由 personID 标识。我正在使用 jdbc API 连接到数据库。是否有可能在 JDBC 中进行调用?

【问题讨论】:

【参考方案1】:

不确定这是否有帮助,但如果您使用的是 PL/SQL,则可以使用 RETURNING INTO 子句...

例如:

DECLARE
 x emp.empno%TYPE;
BEGIN
  INSERT INTO emp
  (empno, ename)
  VALUES
  (seq_emp.NEXTVAL, 'Morgan')
  RETURNING empno
  INTO x;

  dbms_output.put_line(x);
END;
/

参考:http://psoug.org/reference/insert.html

【讨论】:

我实际上在使用 jdbc。有没有可能在 JDBC 中做到这一点? 是的,以下帖子中接受的答案正是如此:***.com/questions/1976625/…【参考方案2】:

您可以在INSERT 语句中使用RETURNING 关键字。

INSERT INTO Person (...) VALUES (...)
RETURNING person_id INTO nbr_id

【讨论】:

【参考方案3】:

你试过 OUTPUT 命令吗?

INSERT INTO TableName(FirstName, LastName, DOB, Sex)
VALUES (<FirstNamei>, <LastNamei>, <DOBi>, <Sexi>)
OUTPUT inserted.PersonID
WHERE <Conditions>

【讨论】:

【参考方案4】:

我认为NEXTVALCURRVAL 应该会有所帮助。检查此参考:Sequence Pseudocolumns,最后一个示例(重用序列的当前值)

【讨论】:

以上是关于在 SQL 的 select 语句中使用 insert的主要内容,如果未能解决你的问题,请参考以下文章

在 Android SQLite 中使用 execSQL 进行 INSERT 操作

oracle带参数的存储过程,一直提示sql无效sql语句。求高手指点

数据的增删改

如何在 SQL Server 的表值函数中使用 CTE 语句

从 update 语句成功调用函数,但从 select 语句调用时出错

如何在 SQL SELECT 语句中使用包常量?