我需要在30个不同的表中搜索一个链接到操作员表的值。
1 .. *关系(使用两列可以通过这30个表中的任何一个引用运算符) 创建
目前我运行30个select语句来查找对这些表的任何引用,即
Select * from table.namespc.contnt
where iCreatedById = 12345
or imodifiedby = 12345
然后我对找到引用的任何表进行更新。
UPDATE table.namespc.contnt
SET iCreatedById = 54321, iModifiedById = 54321
where iCreatedById = 12345
or iModifiedById = 12345
有没有更简单的方法来完成这个过程?将表添加到数组?变量的值,如果找到则只搜索和更新?
答案 0 :(得分:0)
您可以创建一个临时表,其中包含可能引用运算符的30个表的名称
然后,通过游标,循环其元素并动态组合更新查询。此查询应通过execute immediate
。
顺便说一句,更新查询应该分成2个单独的查询:
UPDATE table.namespc.contnt
SET iCreatedById = 54321
WHERE iCreatedById = 12345;
UPDATE table.namespc.contnt
SET iModifiedById = 54321
WHERE iModifiedById = 12345;
这是因为如果您正在寻找的是其中之一,则您同时更新创建者和修饰符。