如何更新在 Oracle 服务器上的每个模式中找到的 table 中的字段值

How to update value of fields in a table found in every schema on an Oracle Server

我需要在 Oracle Server (11g) 上更新 table 和每个包含 table 的模式中的两个字段的值。我来自 SQL 服务器世界,但认识到架构与单个实例下的多个模式不同,而不是单个实例下的多个数据库。此更新的原因是为了确保在客户端数据库的副本上进行数据库开发和测试时,客户端不会意外收到电子邮件(根据每个 [=22= 中的 table 的某些列中定义的设置]).

我正在使用 SQL Developer,但也可以应用 SQLplus。假设服务器名称是 "myServer",table 名称是 "myTable",字段是 table 的 "Field1" 和 "Field2",有人可以帮忙吗提供一些 SQL 来对 myServer 上的所有模式执行全局更新,在 myTable 中设置 Field1 = 'N' 和 Field2 = NULL?或者将我引导至确实回答此问题的 link?我首先 运行 多次搜索,但一无所获。

谢谢

您可以使用动态 SQL

FOR tbl IN (SELECT owner, table_name
              FROM dba_tables
             WHERE table_name = 'MYTABLE')
LOOP
  EXECUTE IMMEDIATE 'update ' || tbl.owner || '.' || tbl.table_name ||
                    '  set field1 = ''N'', ' ||
                    '      field2 = null ';
END LOOP;

您可以添加一些额外的日志记录,您可能希望在局部变量中构建 SQL 语句,以便在出现问题时记录它。这还假设您是 运行 作为有权访问 dba_tables 的用户。如果您想使用您有权访问的名称更新每个 table,则可以使用 all_tables(这可能不会涵盖数据库中的每个 table)。