栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Oracle中的多个嵌套表中更新多个记录

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Oracle中的多个嵌套表中更新多个记录

避免在数据库中使用嵌套表的最佳原因可能是它们难以使用,并且语法文献不足,难以理解。

继续!

这是带有嵌套表的表。

SQL> select f.force_name, t.id, t.name  2  from transformer_forces f, table(f.force_members) t  3  /FORCE_NAME         ID NAME---------- ---------- --------------------Autobot  0 MetroplexAutobot  0 Optimus PrimeAutobot  0 RodimusDecepticon          0 GalvatronDecepticon          0 MegatronDecepticon          0 StarscreamDinobot  0 GrimlockDinobot  0 SwoopDinobot  0 Snarl9 rows selected.SQL>

如您所见,在所有情况下,嵌套表中的每个元素的ID属性都设置为零。我们想做的就是更新所有这些。可惜!

SQL> update table  2   ( select force_members from transformer_forces ) t  3  set t.id = rownum  4  / ( select force_members from transformer_forces ) t   *ERROR at line 2:ORA-01427: single-row subquery returns more than one rowSQL>

可以为保持表中的单行更新嵌套表上的所有元素:

SQL> update table  2       ( select force_members from transformer_forces  3         where force_name = 'Autobot') t  4      set t.id = rownum  5  /3 rows updated.SQL>

但是 对整个表执行 此操作 的唯一方法是PL / SQL循环。!

还有一种选择:通过NESTED_TABLE_GET_REFS提示使用嵌套表定位器。这是一件特别晦涩的事情(不在提示的主列表中),但是可以解决这个问题:

SQL> update  force_members_nt  2  set id = rownum  3  /9 rows updated.SQL> select f.force_name, t.id, t.name  2  from transformer_forces f, table(f.force_members) t  3  /FORCE_NAME         ID NAME---------- ---------- --------------------Autobot  1 MetroplexAutobot  2 Optimus PrimeAutobot  3 RodimusDecepticon          4 GalvatronDecepticon          5 MegatronDecepticon          6 StarscreamDinobot  7 GrimlockDinobot  8 SwoopDinobot  9 Snarl9 rows selected.SQL>

此提示使我们可以完全绕过保持表并使用实际的嵌套表。也就是说,在“嵌套表”存储子句中指定的对象:

create table transformer_forces (    force_name varchar2(10)    , force_members transformers_nt)nested table force_members store as force_members_nt return as value;   ^^^^^^^^^^^^^^^^


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410876.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号