如何在多个用户中执行sql脚本(模式)


您可以使用SQLPlus构建一个脚本,该脚本为每个用户运行一次脚本。 假设你有这样的脚本:

script.sql

select count(1) from obj;

你想为两个用户运行它; 你可以建立如下的脚本:

scriptLauncher.sql

conn alek/****@xe
@d:script
conn hr/****@xe
@d:script

结果:

SQL> @d:scriptLauncher
Connected.

  COUNT(1)
----------
        15

Connected.

  COUNT(1)
----------
        35

当然,这意味着您必须将密码存储在纯文本文件中,这可能会带来安全风险。


如果你的脚本只有DML操作,试试这个

SET SERVEROUTPUT ON
DECLARE
   TYPE my_users_type IS VARRAY (5) OF VARCHAR (256);
   my_users   my_users_type;      
BEGIN
   my_users := my_users_type ('USER1', 'USER2', 'USER3');         --your users
   FOR i IN my_users.FIRST .. my_users.LAST   LOOP
      EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA =' || my_users (i);
      @D:yourscript.SQL; --your script with path
  END LOOP;
end;
/

yourscript.SQL应该只包含被分割的DML命令; 没有其他的。 或者你可以修改它 - 创建一个过程有字符串参数。 参数将是单个DML命令,将为所有用户循环执行。

或者只是使用

ALTER SESSION SET CURRENT_SCHEMA = USER1
@D:yourscript.SQL;
ALTER SESSION SET CURRENT_SCHEMA = USER2
@D:yourscript.SQL;
ALTER SESSION SET CURRENT_SCHEMA = USER3
@D:yourscript.SQL;

对脚本yourscript.SQL没有限制,除非在DML操作中不使用模式名称作为前缀

PS执行用户应该有足够的权利。


我将拥有一个我拥有的文件夹

  • sql脚本
  • 一次连接到每个数据库并运行脚本的OS脚本
  • 要么

    使用拥有所有其他权限的用户运行它3并个性化脚本,以便每个脚本运行它。

    链接地址: http://www.djcxy.com/p/95055.html

    上一篇: How to execute sql script in multiple users (schema)

    下一篇: Sort multiple text fields in MYSQL according to information entered or not