永发信息网

Oracle 跨表更新问题:

答案:8  悬赏:80  手机版
解决时间 2021-11-24 07:17
  • 提问者网友:缘字诀
  • 2021-11-23 13:56
Oracle 跨表更新问题:
最佳答案
  • 五星知识达人网友:神也偏爱
  • 2021-11-23 15:20
整个update语句格式是没有错误的,我没有你的环境,我觉得有几个地方可能会出错,第一:第一个子查询用的是‘=’号,如果子查询结果是多个值,则会报错。第二:字符串连接符|| 两边要是字符串,直接使用数字类型会报错。
还有个疑问就是你的update语句后面的where子句按照你的写法完全可以放在相关子查询中,都是对同一个字段的限定,连接的又是同一个字符串,限制的来源同是一张表,如果前面子查询‘=’限定条件成立了,后面的in限定是不是没有必要了。
全部回答
  • 1楼网友:拜訪者
  • 2021-11-23 21:00
分两句执行

update a set a.count=b.count from a left join b
on a.id=b.id where a.ADD<>'ch'

update a set count=588 where ADD='ch'
  • 2楼网友:慢性怪人
  • 2021-11-23 19:49
update prtinvm set
fsafestock = (select b.fsafestock from OMZ_TMP_SW0827 b where
trim(b.fitemno)=trim(prtinvm.fitemno))
where trim(fitemno) || 'WZ-B1' in
(select trim(fitemno) || 'WZ-B1' from OMZ_TMP_SW0827)
这里面
select b.fsafestock from OMZ_TMP_SW0827 b where
trim(b.fitemno)=trim(prtinvm.fitemno))
where trim(fitemno) || 'WZ-B1' in
(select trim(fitemno) || 'WZ-B1' from OMZ_TMP_SW0827
查出来的是多个值,如果只是想要不报错,可以改成
select max(b.fsafestock) from OMZ_TMP_SW0827 b where
trim(b.fitemno)=trim(prtinvm.fitemno))
where trim(fitemno) || 'WZ-B1' in
(select trim(fitemno) || 'WZ-B1' from OMZ_TMP_SW0827
  • 3楼网友:长青诗
  • 2021-11-23 19:40
update a set a.count=(select count from b where b.id=123) where a.add=ch
  • 4楼网友:像个废品
  • 2021-11-23 19:11
为什么fitemno 要拼“WZ-B1”,报错信息是什么?
尝试用 update a set column=b.column
from b where a.col1=b.col1
这种方式更新。
  • 5楼网友:纵马山川剑自提
  • 2021-11-23 18:05
简要说明:10G支持网格(网格),支持自动管理(自动管理)。

10g G说:“网格”是网格计算的缩写,即多节点服务器使用高速网络形成一个虚拟的高性能服务器,在整个电网负荷平衡(负载平衡),根据增删节点的需求,避免单点故障(避免单点故障)。
安装容易,安装工作是由9i减少一半以上。
新的基于浏览器的企业经理(企业经理)。

自动存储管理(ASM),硬盘镜像,增删无操作系统管理员设置的负载平衡,物理卷、逻辑卷、分区、文件系统,只要一个命令,ASM将自动添加或删除硬盘管理。内存自动化,根据需要自动分配和释放系统内存。SQL性能调优自动化。
提供基础的小应用程序开发工具,免费的浏览器,使用应用程序(以前称为HTML DB),10G和9i R2支持。快速纠正人为错误(闪回)闪回查询和恢复,可以恢复数据库表,甚至记录。数据泵(数据泵)高速进出口数据,比传统的出口速度快两倍以上,进口速度15 - 45倍。审计(细粒度)记录敏感数据上的所有操作。在表空间(表空间)中存储数据,跨平台复制,极大地提高了数据仓库的加载速度。>(流)复制,实现低功耗、双向系统(双向)、HTTP(断点续传)、跨平台(跨平台)、跨数据源的复杂复制。守护(数据)添加逻辑备份功能。备份数据库可以每天以只读状态运行,充分利用备份数据库。
支持许多新的EE方案,加强数据库”数据库库的数据库审计活动的内部管理(审计室),构建数据仓库的高级功能(Warehouse Builder企业ETL Warehouse Builder数据质量)。

Oracle 11g 10g比什么新特点?11 g扩展Oracle提供了网格计算功能的独特优势,你可以用它来提高客户服务水平,减少停机时间和更有效地利用IT资源,而且还可以提高性能,全天候业务应用的可扩展性和安全性。使用真正的应用测试(RAT)来降低变更的风险,减少11的g,减少数据库升级和其他硬件和操作系统成本的变化,大大简化了系统测试前后的变化,这样您就可以识别和解决问题。例如:通过数据库重播,在数据库级别的生产负载可以轻松地捕获实际的和在您的测试系统中播放,因此您可以更改整个测试系统(包括并发密钥影响)。SQL性能分析器标识结构化查询语言)SQL(执行计划更改和性能回滚)。然后,您可以使用SQL优化顾问来解决通过恢复到原始执行计划或进一步优化来识别的问题。

使用自动化管理提高DBA效率,和

Oracle数据库11 g继续专注于简化和完全自动化的DBA任务(从Oracle9i数据库从Oracle数据库10 g)。在G 11的Oracle数据库的新功能包括:
具有自学习功能和自动SQL优化系统全局区(SGA)和程序全局区(PGA)的内存缓冲区,为分区,新顾问数据恢复自动调节均匀,流动性能和空间的自动数据库诊断监视器管理(ADDM)的增强,能够提供Oracle真正应用集群(Oracle RAC)性能更好的性能和改进的环境比较分析函数的全局观。利用故障诊断技术快速地解决这个问题,在Oracle 11 G中新的故障诊断功能使得用户在发生错误后捕获Oracle支持所需的数据非常简单。这可以加快问题的解决,减少客户重现问题的需要。>尽可能地减少停机费用,如:< Oracle数据保护> > > Oracle数据保护;快速恢复数据;本地和远程数据库服务器之间的协调和灾难现场的同步或快速恢复。Oracle G 11数据库提供了大量的Oracle数据显著增强防范,包括
可以运行在实时查询系统的物理备份报表和其他
可以物理备用系统暂时转换为逻辑备用系统进行在线控制
  • 6楼网友:一秋
  • 2021-11-23 17:10
updata A set A.Count = ( select Count from B where B.ID = A.ID) where A.ADD = CH追问能写的完整些吗?在Oracle 里面更新不成功。追答你数据库里的表是不是和上面的表不一样。updata A set A.Count = ( select Count from B where B.ID = A.ID) where A.ADD = CH 只针对上面那个表。你可以根据你数据库表的结构,或者条件进行适当的修改。更新语句结构就是这样的。追问是的,不一样,你帮我看下下面的更新语句有何错误,更新时会报错:

update prtinvm set
fsafestock = (select b.fsafestock from OMZ_TMP_SW0827 b where
trim(b.fitemno)=trim(prtinvm.fitemno))
where trim(fitemno) || 'WZ-B1' in
(select trim(fitemno) || 'WZ-B1' from OMZ_TMP_SW0827)追答你不认为
where
trim(b.fitemno)=trim(prtinvm.fitemno)

where trim(fitemno) || 'WZ-B1' in
(select trim(fitemno) || 'WZ-B1' from OMZ_TMP_SW0827)是一样的么?
建议你将后一个条件换一下,才能对prtinvm起到条件约束的目的。追问即使改了后面的条件,也一样报错,你能写一个完整句子吗追答先将你的问题描述清楚,prinvm a , OMZ_TMP_SW0827 b。你是将a 表中fsafetock字段的值改为b表中对应的值,关联字段是trim( a.fitemno) =trim(b.fitemno ),没有其他条件了么?
  • 7楼网友:十年萤火照君眠
  • 2021-11-23 16:57
1、语句更新:update A set count=(select count from B where id=A.id) and add='CH';
2、脚本更新:如下
declare
cursor c1 is select id,count from B order by id;
v c1%rowtype;
begin
open c1;
loop
fetch c1 into v;
exit when c1%notfound;
update A set count=v.count where id=v.id and add='CH';
end loop;
close c1;
commit;
end;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯