首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL错误: ORA-38104:无法更新ON子句中引用的列

ORA-38104是Oracle数据库中的一个错误代码,表示无法更新ON子句中引用的列。这个错误通常发生在使用MERGE语句进行数据合并操作时。

在Oracle数据库中,MERGE语句用于将数据从一个表合并到另一个表,根据指定的条件进行插入、更新或删除操作。在MERGE语句中,ON子句用于指定合并条件,而当ON子句中引用的列需要进行更新时,就会出现ORA-38104错误。

解决这个错误的方法是使用子查询来更新ON子句中引用的列,而不是直接引用列。具体步骤如下:

  1. 将MERGE语句中的ON子句中引用的列替换为子查询,该子查询返回需要更新的列的值。
  2. 在子查询中使用FROM子句指定需要更新的表,并使用WHERE子句指定更新条件。
  3. 在MERGE语句的UPDATE子句中引用子查询的结果,以更新ON子句中引用的列。

下面是一个示例:

代码语言:txt
复制
MERGE INTO target_table t
USING (
  SELECT column1, column2, ... -- 需要更新的列
  FROM source_table
  WHERE condition -- 更新条件
) s
ON (t.key_column = s.key_column) -- 合并条件
WHEN MATCHED THEN
  UPDATE SET t.column1 = s.column1, t.column2 = s.column2, ... -- 更新ON子句中引用的列
WHEN NOT MATCHED THEN
  INSERT (column1, column2, ...) VALUES (s.column1, s.column2, ...); -- 插入新数据

在腾讯云的数据库产品中,可以使用TencentDB for MySQL、TencentDB for PostgreSQL等关系型数据库产品来执行类似的合并操作。这些产品提供了稳定可靠的数据库服务,具有高可用性、高性能和强大的扩展能力,适用于各种应用场景。

TencentDB for MySQL产品介绍链接:https://cloud.tencent.com/product/cdb

TencentDB for PostgreSQL产品介绍链接:https://cloud.tencent.com/product/pg

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于ORACLE merge into 两个常见错误

: -PART1.ora-30926 :无法在源表中获得一组稳定行 INSERT INTO TEST_111111  VALUES (1,'小红'); 上面这条语句执行两次,插入两条相同记录 INSERT...THEN  UPDATE SET T1.NAME = T2.NAME  WHEN NOT MATCHED THEN  INSERT VALUES (T2.ID,T2.NAME); --PART2:ora...-38104:无法更新on子句中引用  MERGE INTO TEST_111111 T1  USING TEST_222222 T2  ON (T1.NAME = T2.NAME )  WHEN...思考:错误二引发对错误思考 假使我在做ON判断时候用是表主键,然后我想做UPDATE 操作时候如果是on 里面的条件字段,也就是说 要更新是  数据库 中 表主键 ,这也就违背了  数据库主键约束条件...因此,从错误二去反推错误一,就自然好理解了。

6.7K30

db2 terminate作用_db2 truncate table immediate

42637 无法在 DECLARE CURSOR 语句中指定 XQuery 表达式。42701 在插入或更新操作或 SET 转换变量语句中检测到重复列名。42702 由于名称重复,引用有歧义。...42803 在 SELECT 或 HAVING 子句中引用无效,因为它不是分组;或者在 GROUP BY 子句中引用无效。42804 CASE 表达式中结果表达式不兼容。...42637 无法在 DECLARE CURSOR 语句中指定 XQuery 表达式。 42701 在插入或更新操作或 SET 转换变量语句中检测到重复列名。 42702 由于名称重复,引用有歧义。...42821 更新或插入值与不兼容。 42823 从仅允许一查询中返回了多。 42824 LIKE 操作数不是字符串,或第一个操作数不是。...428DQ 子表或视图模式名不能与其上一级表或上一级视图模式名不同。 428DR 无法将操作应用于子表或视图。 428DS 不能在子表中定义指定索引。

7.6K20
  • 史上最全 DB2 错误代码大全

    +204 01532 命名对象未在DB2中定义 +206 01533 命名不在SQL句中指定任何表中存在 +218 01537 因为SQL语句引用一个远程对象,不能为该SQL语句执行EXPLAIN...FOR UPDATE OF语句中没有被指定,该游标用于获取该,所以不能更新 -504 34000 不能引用一个游标,因为他不是定义到程序里 -507 24501 在试图更新或者删除WHERE CURRENT...可改变主健更新语句不能在同一时刻用于更新多行 -535 21502 当从自我引用表中删除数据或者更新主健时,不能指定WHERE CURRENT OF。...语句无法执行,因为连接不存在 -870 58026 宿主变量描述符个数不等于语句中宿主变量个数 -872 51302 这个子系统已指定了有效CCSID -873 53090 同一SQL句中,不能同时引用...,因为在现存视图定义中引用了该函数 -20074 42939 不能建立指定对象,因为“SYS”是一个保留前缀 -20100 56059 在被触发SQL句中有BIND错误,指定了错误SQLCODE

    4.6K30

    DB2错误代码_db2错误码57016

    +204 01532 命名对象未在DB2中定义 +206 01533 命名不在SQL句中指定任何表中存在 +218 01537 因为SQL语句引用一个远程对象,不能为该SQL语句执行EXPLAIN...FOR UPDATE OF语句中没有被指定,该游标用于获取该,所以不能更新 -504 34000 不能引用一个游标,因为他不是定义到程序里 -507 24501 在试图更新或者删除WHERE CURRENT...可改变主健更新语句不能在同一时刻用于更新多行 -535 21502 当从自我引用表中删除数据或者更新主健时,不能指定WHERE CURRENT OF。...语句无法执行,因为连接不存在 -870 58026 宿主变量描述符个数不等于语句中宿主变量个数 -872 51302 这个子系统已指定了有效CCSID -873 53090 同一SQL句中,不能同时引用...,因为在现存视图定义中引用了该函数 -20074 42939 不能建立指定对象,因为“SYS”是一个保留前缀 -20100 56059 在被触发SQL句中有BIND错误,指定了错误SQLCODE

    2.6K10

    T-SQL基础(三)之子查询与表表达式

    :warning: 我们应时刻牢记SQL是三值逻辑,这点很容易引发错误 列名处理不当 查询中列名首先从当前查询中进行解析,若未找到则到外部查询中查找。...查询中很有可能无意中包含了外部查询列名导致查询有自包含查询变为相关子查询而引发逻辑错误。 为避免上述错误,查询中列名尽可能使用完全限定名:[表名].[列名]。...:warning: 通常我们自己难以发现代码中逻辑错误,而我们最终用户尝尝扮演着问题发现者角色 :joy: 编写语义清晰明了SQL可以很大程度避免逻辑上错误 表表达式 表表达式,也可称为表查询...在一次查询中派生表无法被多次引用,若要多次引用,则需要多次书写派生表: USE WJChi; SELECT Cur.orderyear, Prv.numcusts AS prvnumcusts,...视图一旦创建,在底层数据表发生变更后,其不会自动更新。因此,在视图中使用SELECT语句时尽可能显式指定所需,而不是使用SELECT *。

    1.6K40

    T-SQL基础(三)之子查询与表表达式

    ⚠️ 我们应时刻牢记SQL是三值逻辑,这点很容易引发错误 列名处理不当 查询中列名首先从当前查询中进行解析,若未找到则到外部查询中查找。...查询中很有可能无意中包含了外部查询列名导致查询有自包含查询变为相关子查询而引发逻辑错误。 为避免上述错误,查询中列名尽可能使用完全限定名:[表名].[列名]。...编写语义清晰明了SQL可以很大程度避免逻辑上错误 表表达式 表表达式,也可称为表查询,是一个命名查询表达式,表示一个有效关系表,因此表表达式必须满足以下三个条件: 无法表表达式结果集顺序...在一次查询中派生表无法被多次引用,若要多次引用,则需要多次书写派生表: USE WJChi; ​ SELECT Cur.orderyear, Prv.numcusts AS prvnumcusts...视图一旦创建,在底层数据表发生变更后,其不会自动更新。因此,在视图中使用SELECT语句时尽可能显式指定所需,而不是使用SELECT *。

    1.5K10

    Hive3查询基础知识

    SET语句右侧不允许查询。分区和存储桶无法更新。 您必须具有SELECT和UPDATE特权才能使用UPDATE语句。 创建一条语句来更改gpa值为1.0所有行name值。...使用查询 Hive支持可用于许多Hive操作FROM子句和WHERE子句中查询,例如,根据另一个表内容过滤来自一个表数据。 查询是内部查询中SQL表达式,它将结果集返回到外部查询。...• 仅在查询WHERE子句中允许引用父查询中。 • 引用父查询中查询谓词必须使用equals(=)谓词运算符。 • 查询谓词可能不只引用父查询中。...• 带有隐含GROUP BY语句相关子查询可能仅返回一行。 • 查询中对所有不合格引用都必须解析为查询中表。 • 相关子查询不能包含窗口子句。...相关查询包含带有等于(=)运算符查询谓词。运算符一侧必须引用父查询中至少一,而另一侧必须引用查询中至少一。不相关查询不会引用父查询中任何

    4.7K20

    SQL高级查询方法

    不能更新使用查询创建视图。 按照惯例,由 EXISTS 引入查询选择列表有一个星号 (*),而不是单个列名。...由于各种联接实际执行过程会采用多种不同优化,因此无法可靠地预测。 联接例子可以参考笔试题中例子,SQL笔试50题(上),SQL笔试50题(下),在笔试题中有大量内联接和左联接例子。...若要用新名称引用结果集中(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中方式引用 SELECT city AS Cities FROM stores_west UNION...启用按从标量嵌套 select 语句派生进行分组,或者按不确定性函数或有外部访问函数进行分组。 在同一语句中多次引用生成表。 使用 CTE 可以获得提高可读性和轻松维护复杂查询优点。...定义 CTE 后,可以在 SELECT、INSERT、UPDATE 或 DELETE 语句中对其进行引用,就像引用表或视图一样。

    5.7K20

    MySQLMariaDB表表达式(3):视图「建议收藏」

    也就是说,如果视图定义语句中select语句中使用了星号"*"表示所有,在创建视图时候会转化为对应列名存储在视图定义语句中,所以如果基表中新增了将不会被视图SQL语句检索到。...如果在引用视图时也使用了order by子句,则视图引用句中order by覆盖视图定义语句中order by。...例如在引用视图时会将视图名替换成基表名,将查询涉及替换成基表中列名等。 temptable将视图结果放入临时表中,然后使用该表数据执行对应语句操作。...,无法结合基表进行数据更新。...之所以有以上限制,是因为使用了它们之后,视图结构和基表机构不一致,无法和基表一一对应,也就无法作为可更新视图。 4.删除、查看视图 可以一次性删除多个视图。

    1.2K20

    T-SQL进阶:超越基础 Level 2:编写查询

    查询另一个特点是可以独立于外部查询运行,并且将无错误地运行,并且可能返回一组行或空行集。 查询另一种形式是相关子查询。但是相关查询不能独立于外部Transact SQL语句运行。...使用查询时还需要考虑以下几点: ntext,text和image数据类型不允许从子查询返回 ORDER BY子句不能用于查询,除非使用TOP操作符 使用查询视图无法更新 COMPUTE和INTO...接下来几个例子将使用返回多个值和/或多个查询。 FROM子句中查询示例 在FROM子句中,通常会标识您Transact-SQL语句将对其执行表或表集合。...问题1: 完成这个句子“一个查询是另一个Transact-SQL句中SELECT语句,_____________________”。 不能独立于完整查询运行。 引用来自外部查询。...问题3: 正确答案是错误SQL Server优化器非常聪明,很可能为两个等效查询计算相同执行计划。

    6K10

    SQL命令 CREATE VIEW(二)

    通过视图更新 视图可用于更新视图所基于表。可以通过视图插入新行,更新通过视图看到行中数据,以及删除通过视图看到行。...若要防止通过视图进行更新,请指定WITH READ ONLY。尝试通过使用READ ONLY创建视图执行插入、更新或删除操作会生成SQLCODE-35错误。...视图SELECT语句不能包含DISTINCT、TOP、GROUP BY或HAVING子句,也不能是UNION一部分。 视图SELECT语句不能包含查询。...视图SELECT语句只能列出作为引用值表达式。 视图SELECT语句只能有一个表引用;它不能在SELECT-LIST或WHERE子句中包含FROM子句、联接语法或箭头语法。...表引用必须指定可更新表或可更新视图。 WITH CHECK OPTION子句导致INSERT或UPDATE操作根据视图定义WHERE子句验证结果行。这可确保插入或修改行是派生视图表格一部分。

    1.5K41

    30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    然 而,如果在编译时建立访问计 划,变量值还是未知,因而无法作为索引选择输入项。...id from t where name like 'abc%'; 10.不要在 where 子句中“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用 索引。...16.应尽可能避免更新 clustered 索引数据, 因为 clustered 索引数据顺序就是表记录物理存储顺序,一旦该值改变将导致整个表记录顺序调整,会耗费相当大资源。...和 InnoDB表有作用,对于MyISAM表,关键字统计数据被更新 CHECK TABLE 也可以检查视图是否有错误,比如在视图定义中被引用表不存在。...拆开 句中应该包含索引。

    2.2K100

    sqlserver创建视图索引「建议收藏」

    视图必须仅引用与视图位于同一数据库中基表。 视图无法引用其他视图。...如果视图定义包含 GROUP BY 子句,则唯一聚集索引键只能引用 GROUP BY 子句中指定。...所有被引用对象都必须在同一个数据库内。 –不能删除参与了使用 SCHEMABINDING 子句创建视图视图或表,除非该视图已被删除或更改而不再具有架构绑定。 否则, 数据库引擎将引发错误。...还可以在 SELECT 语句中分配列名。 --如果未指定 column,则视图列将获得与 SELECT 语句中相同名称。...所有被引用对象都必须在同一个数据库内。 --不能删除参与了使用 SCHEMABINDING 子句创建视图视图或表,除非该视图已被删除或更改而不再具有架构绑定。 否则, 数据库引擎将引发错误

    3.4K20

    SQL命令 SELECT(三)

    别名在结果集中显示为标题。指定别名是可选;始终提供默认值。别名以指定字母大小写显示;但是,当在ORDER BY子句中引用时,它不区分大小写。C别名必须是有效标识符。...当ORDER by子句引用此类非惟一别名时,可能会导致SQLCODE -24“Ambiguous sort column”错误别名与所有SQL标识符一样,不区分大小写。...其他SELECT子句中别名使用由查询语义处理顺序控制。 可以通过ORDER by子句中别名引用。...不能在选择列表中另一个选择项、DISTINCT BY子句、WHERE子句、GROUP BY子句或HAVING子句中引用别名。 不能在JOIN操作ON子句或USING子句中引用别名。...尝试这样做会导致SQLCODE -23错误。 当查询仅引用一个表(或视图)时,可选择指定表别名。 当查询引用多个表(和/或视图)且引用字段名对每个表都是唯一时,指定表别名是可选(但推荐)。

    2.2K10

    .Net cache与cache更新

    这就好办了, 根据帮助文档, 发现这个sql要求真不是一般严格 现在说一下这个"sql", 这个sql首先要求是一个select语句,然后: 必须显式说明 SELECT 语句中提取,并且表名必须限定为两部分组成名称...注意,这意味着语句中引用所有表都必须处于同一数据库中。 语句不能使用星号 (*) 或 table_name.* 语法指定。 语句不能使用未命名列或重复列名。...语句必须引用基表。 语句不能引用具有计算表。 在 SELECT 语句中提取不能包含聚合表达式,除非语句使用 GROUP BY 表达式。...但是,不能为可为空指定 SUM()。语句不能指定 HAVING、CUBE 或 ROLLUP。 在用作简单表达式 SELECT 语句中提取不能多次显示。...语句不能引用队列。 语句不能包含无法更改和无法返回结果条件语句(如 WHERE 1=0)。 语句不能指定 READPAST 锁提示。

    98850

    Oracle面试题

    引用索引第二个时,优化器使用了全表扫描而忽略了索引。...这样一来,就可以减少解析时间并减少那些由歧义引起语法错误。(19)避免在索引列上使用 IS NULL和IS NOT NULL避免在索引中使用任何可以为空,ORACLE将无法使用该索引 。...,则无法更新视图如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图。...如果视图包含伪或表达式,则将无法更新视图。复杂视图中,可以更新键保留表,不可以更新非键保留表。15.CHAR类型和VARCHAR类型有何区别?...乐观锁就是认为数据一般情况下不会造成冲突,只有在数据进行提交更新时候,才会正式对数据冲突与否进行检测,如果发现冲突了,则让用户返回错误信息,让用户决定如何去做。

    1.6K00

    java面试(3)SQL优化

    因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量值还是未知,因而无法作为索引选择输入项。...应尽可能避免更新 clustered 索引数据,因为 clustered 索引数据顺序就是表记录物理存储顺序,一旦该值改变将导致整个表记录顺序调整,会耗费相当大资源。...order by子句:执行顺序从左到右 避免数据类型不一致 读取适当记录LIMIT M,N 避免在select句中使用查询 对于有联接,即使最后联接值为一个静态值,优化器是不会使用索引...减少对表查询: 在含有查询SQL句中,要特别注意减少对表查询.例子: SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT..., 只有在它第一个(leading column)被where子句引用时,优化器才会选择使用该索引.

    3.2K20

    MySQL还能这样玩---第五篇之视图应该这样玩

    columns或者 desc 表时候,有LOB或者TEXT GROUP BY 或者 DISTINCT 子句中包含长度大于512字节 ---- 视图原理 总结:在定义视图时候,尽可能不要让其走临时表算法...,以下类型视图是不可更新 包含以下关键字SQL语句: 聚合函数(SUM,MIN,MAX,COUNT等),DISTINCT。...GROUP BY , HAVING,UNION或者UNION ALL 常量视图 SELECT中包含查询 JOIN FROM一个不能更新视图 WEHERE子句查询引用了FROM子句中表...看底层实现 重点在于使用临时表算法实现视图是不可以被更新,在原表和视图无法建立一一映射条件下,就会使用临时表算法 ---- 举例: 以下视图都是不可更新 包含聚合函数: create or replace...条件,所以更新操作提示错误退出。

    52910

    SQL命令 INSERT(一)

    下面是使用查询代替TABLE参数INSERT示例: INSERT INTO (SELECT field1 AS ff1 FROM MyTable) (ff1) VALUES ('test') 查询目标必须是可更新...尝试使用不可更新视图或查询进行插入会生成SQLCODE-35错误。 不能在表参数中指定表值函数或联接语法。...如果定义了其中一个字段,则如果没有为这些字段指定值,此INSERT语法将发出SQLCODE-62错误;如果确实为这些字段指定值,此INSERT语法将发出SQLCODE-138无法插入/更新只读字段错误...编译后SQL支持将输入值从显示或ODBC格式自动转换为逻辑格式。无法转换输入值会导致SQLCODE错误,例如SQLCODE-146和SQLCODE-147。...在SQL CREATE Function、CREATE METHOD或CREATE PROCEDURE语句中,如果指定SELECTMODE运行时, IRIS将使用将输入值从显示格式转换为逻辑模式存储格式代码编译

    6K20
    领券