首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从select语句更新值

从select语句更新值
EN

Stack Overflow用户
提问于 2010-07-19 21:48:19
回答 2查看 355关注 0票数 0

我正在使用Oracle数据库系统上的Access (基本上使用Access作为表单,并使用ADO代码进入表中),并尝试使用加载表中相同名称字段的值来更新product表中的字段。我使用的代码是:

代码语言:javascript
运行
复制
.CommandText = "UPDATE " & strSchema & ".TBL_CAPITAL_MGMT_PRODUCT a INNER JOIN " & strSchema & ".TBL_CAPITAL_MGMT_TEMP_LOAD b ON a.AR_ID = b.AR_ID SET a.TOT_RWA_AMT = b.TOT_RWA_AMT;"

这将返回一个关于缺少SET关键字的错误。因此,我将其更改为:

代码语言:javascript
运行
复制
.CommandText = "UPDATE (SELECT a.TOT_RWA_AMT, b.TOT_RWA_AMT As New_RWA_AMT FROM " & strSchema & ".TBL_CAPITAL_MGMT_TEMP_LOAD a INNER JOIN " & strSchema & ".TBL_CAPITAL_MGMT_PRODUCT b ON b.AR_ID = a.AR_ID Where a.New_Rec <> '-1' AND a.IP_ID Is Not Null) c SET c.New_RWA_AMT = c.TOT_RWA_AMT;"

这将返回一个关于非键保留表的错误。B表的pk是AR_ID,但是a表没有主键,它可能得不到主键,我不能更新任何表的结构。

我尝试使用/*+ BYPASS_UJVC */,它允许代码运行,但实际上似乎没有做任何事情。

有没有人知道我该怎么做?

谢谢

亚历克斯

EN

回答 2

Stack Overflow用户

发布于 2010-07-19 22:22:13

忽略不相关的ADO代码,您尝试进行的更新是:

代码语言:javascript
运行
复制
UPDATE TBL_CAPITAL_MGMT_PRODUCT a 
INNER JOIN 
SET a.TOT_RWA_AMT = b.TOT_RWA_AMT;

甲骨文不支持这一点(尽管这个未公开的BYPASS_UJVC提示应该可以克服这一点,但我直到现在才意识到这一点)。

鉴于您的内联视图版本由于缺乏约束而失败,您可能不得不使用使用相关子查询的传统Oracle方法:

代码语言:javascript
运行
复制
UPDATE TBL_CAPITAL_MGMT_PRODUCT a 
SET a.TOT_RWA_AMT = (SELECT b.TOT_RWA_AMT 
                       FROM TBL_CAPITAL_MGMT_TEMP_LOAD b
                      WHERE a.AR_ID = b.AR_ID
                    )
WHERE EXISTS (SELECT NULL 
                FROM TBL_CAPITAL_MGMT_TEMP_LOAD b
               WHERE a.AR_ID = b.AR_ID
             );    

最后一个WHERE子句是为了防止在没有匹配"b“行的任何"a”行上将TOT_RWA_AMT设置为NULL。如果您知道这永远不会发生,您可以删除WHERE子句。

票数 2
EN

Stack Overflow用户

发布于 2010-07-20 15:33:37

如果您使用的是Oracle10g或更高版本,那么可以使用只带MATCHED子句的MERGE语句来替代Tony的解决方案。

代码语言:javascript
运行
复制
MERGE INTO TBL_CAPITAL_MGMT_PRODUCT a
   USING TBL_CAPITAL_MGMT_TEMP_LOAD b
   ON (a.AR_ID = b.AR_ID)
WHEN MATCHED THEN
   UPDATE SET a.TOT_RWA_AMT = b.TOT_RWA_AMT;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3281617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档