首页 > 数据库 >Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式

Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式

时间:2023-04-20 17:22:08浏览次数:39  
标签:38104 WHEN 更新 REPORT 子句 Oracle CONFIG ID MATCHED

参考:

MERGE INTO QLIK_CONFIG_MAPPING_REPORT USING dual
ON (CONFIG_ID=2 AND REPORT_ID=6)
WHEN MATCHED THEN
UPDATE SET "CONFIG_ID" = 2,"REPORT_ID"=6
WHEN NOT MATCHED THEN
INSERT ("CONFIG_ID","REPORT_ID") VALUES(2,6);

这里请注意,在ON中出现的字段,不可以在WHEN MATCHED THEN中更新,所以无法更新CONFIG_ID以及REPORT_ID字段【试想根据某个字段(例如主键id)进行更新记录的过程中直接更新了该字段(例如主键id)的值, 确实也说不通】。

正确的写法,

1:要么UPDATE SET 后面字段不能包含ON 后面出现的字段

2:要么直接就不使用下面的语句(这个根据实际需求来取舍)

WHEN MATCHED THEN
UPDATE SET "CONFIG_ID" = 2,"REPORT_ID"=6

参考链接:Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式 - MrZhaoyx - 博客园
————————————————
版权声明:本文为CSDN博主「lgq2016」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lgq2016/article/details/120701691

标签:38104,WHEN,更新,REPORT,子句,Oracle,CONFIG,ID,MATCHED
From: https://www.cnblogs.com/moonsoft/p/17337560.html

相关文章

  • excel文档导入到Oracle表中方法
    第一种方式:excel文本中的列名最好是英文名,方便导入的时候对数据库表中的列名,中文名可能会出错另一种方法:该方法比较简便可以直接通过'select*from表名forupdate',直接复制粘贴excel中的字段到表中第一种方式导入:在plsql中,工具→ODBC导入器→来自ODBC的数据输入用户/系统......
  • Oracle 开窗函数 三个排序函数的区别
    1.ROW_NUMBER2.RANK3.DENSKRANK这三个函数都是依托窗口函数进行的分组后的排序,对于排序的特点有些细节的区别ROW_NUMBER()就是简单地按照Partitionby要分组的字段排序,若orderby后的字段值相同会区分出大小(原则不详),整体来说是的由1到N的排序selectt.*,row_number()over......
  • oracle 长事务处理过程
    1.定位具体xid和sql,可以看到回滚段大小,具体的sqlidSQL>@transSIDSERIAL#USERNAMEUSED_UBLKUSED_URECSTATUSSTART_DATEXID-----------------------------------------------------------------------------------------------4976069SYS 1 ......
  • oracle 插入字符串
    一直都认为oracle有插入方法,可是没找到,就写了一个凑合用写的是procedure,需要的可以把他改成function--插入字符串createorreplaceprocedureinsert_pro(strinvarchar2,--str为原字符串strindexinnumber,--strindex为插入的开始位置,会插入他的后边......
  • oracle 分页存储过程
     查询oracle时,做存储过程实现分页  createorreplaceprocedurequery_by_page(pagenuminnumber,pagesqlinvarchar2,pagesizeinnumber,pagecountoutnumber,allpagecountoutnumber,v_curoutquerypage.type_cur)asv_sqlvarchar2(3000);v_pbnumber;v_pd......
  • oracle 获取表,列注释
    前段时间,自己用的表好长,列好多(这是谁设计滴)所以给自己写了几个方法,贴出来晒晒,供以后使用: 获取列的注释createorreplacefunctionget_column_comment(tablenameinvarchar2,columnnameinvarchar2)returnvarchar2asv_commentuser_col_comments.comments%type;begin......
  • oracle 分区
    创建分区--先声明一下:列表分区不支持多列,但是范围分区和哈希分区支持多列。createtablegraderecord--范围分区根据列的值的范围(snovarchar2(10),snamevarchar2(20),dormitoryvarchar2(3),gradeint)partitionbyrange(grade)(partitionfailvalues......
  • oracle 语法备忘录
     --游标cursorobject_cursorisXXX;openobject_cursor;closeobject_cursor;   --引用游标typetype_my_ref_cursorisrefcursor;//refcursormy_ref_cursortype_my_ref_cursor;openmy_ref_cursorforXXXclosemy_ref_cursor;   --触发器createorrepl......
  • Oracle CASE WHEN 用法介绍
    1.CASEWHEN表达式有两种形式 --简单Case函数CASEsexWHEN'1'THEN'男'WHEN'2'THEN'女'ELSE'其他'END--Case搜索函数CASEWHENsex='1'THEN'男'WHENsex='2'THEN'女&......
  • Oracle MySQL Server 拒绝服务漏洞(CVE-2023-21912) 修复
    CVE编号公告标题和摘要最高严重等级受影响的软件CVE-2023-21912OracleMySQLServer拒绝服务漏洞未经身份验证的远程攻击者可通过MySQL协议网络访问MySQLServer,成功利用此漏洞可导致目标MySQLServer挂起或频繁重复崩溃,造成拒绝服务攻击重要MySQLServer<=5.7.41......