在 ORACLE 插入查询中选择查询

Posted

技术标签:

【中文标题】在 ORACLE 插入查询中选择查询【英文标题】:SELECT QUERY within ORACLE INSERT QUERY 【发布时间】:2016-08-24 09:59:46 【问题描述】:

我使用 ORACLE 10g 作为数据库。

考虑两个表: 1.) 以 A 列为主键的 ABC 和 rest 可以保存空值 2.) 以 W 列为主键的 XYZ 和 rest 可以保存空值

对等体的数据类型也相同 示例: A = W , B=X , C=Y , D=Z 相等表示数据类型相同

以下查询运行良好

INSERT INTO ABC(A ,B,C,D) 
VALUES ('klm'  , (SELECT X FROM XYX WHERE W ='SOME_VALUE') , 'Dsl' , 'rwz')

但是以下查询不起作用..如果有人可以帮助我吗?

INSERT INTO ABC(A,B,C,D) 
VALUES ( (SELECT W, X , Y , Z FROM XYX WHERE W ='SOME_VALUE') )

注意:W 的值不在表 ABC 中。没有违反约束

错误报告:SQL 错误:ORA-00947:没有足够的值 00947. 00000 - “没有足够的值”

请解释一下??

插入 ABC(A,B,C,D) VALUES('123' , (SELECT X,Y,Z from XYZ where W = 'same_value')) 我需要解决这个通用问题

【问题讨论】:

【参考方案1】:

删除values 构造函数并在Insert 之后直接使用Select 查询。

试试这个方法

INSERT INTO ABC(A,B,C,D) 
SELECT W, X , Y , Z FROM XYX WHERE W ='SOME_VALUE'

更新

只需硬编码Select 列表中的值(123)

INSERT INTO ABC(A,B,C,D) 
SELECT 123, X , Y , Z FROM XYX WHERE W ='SOME_VALUE'

【讨论】:

嘿,感谢您的快速响应每次我不这样做时,插入 ABC(A,B,C,D) VALUES('123' , (SELECT X,Y, Z from XYZ where W = 'same_value')) 我需要一个解决这个通用问题的方法

以上是关于在 ORACLE 插入查询中选择查询的主要内容,如果未能解决你的问题,请参考以下文章

从一个表中选择,插入另一个表 oracle sql 查询

Oracle中的多行插入查询(从一张表中选择多行并插入到另一张表中[重复]

Oracle SQL 中的插入选择查询缺少表达式错误

优化插入选择查询Oracle

在oracle中怎么将查询到的数据插入到另一个表中

插入带有光标值的选择查询