試試這個,如果你的腳本只有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操作
附:前綴執行用戶應該有足夠的權利。
除了這個答案之外,考慮授予對單個用戶的各種用戶的代理訪問權限。使用像下面這樣的單個用戶連接到每個代理用戶:conn alek [hr]/**** @ xe。最後,參數化該單個用戶的密碼。這應該避免安全問題。 –