在 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】:我认为NEXTVAL
和CURRVAL
应该会有所帮助。检查此参考:Sequence Pseudocolumns,最后一个示例(重用序列的当前值)
【讨论】:
以上是关于在 SQL 的 select 语句中使用 insert的主要内容,如果未能解决你的问题,请参考以下文章
在 Android SQLite 中使用 execSQL 进行 INSERT 操作
oracle带参数的存储过程,一直提示sql无效sql语句。求高手指点
如何在 SQL Server 的表值函数中使用 CTE 语句