有讓 A Owner 使用 All Owner 的所有 Object 的語法: 點選此處,
但是, 若只是要讓 A Owner 使用 B Owner 的所有 Object,
而假設 B Owner 有 1000 個 Object,
若透過 Grant 一行一行授權, 則 1000 個 Object 就要執行授權 1000 次,
會令人受不了的,
所以, 解決方式, 就是用動態 SQL 做批次授權, 可以參考如下喔.
步驟 1) 用 DBA Owner 或 B Owner 登入某個 SQL Tools (如: Oracle SQL Developer),
步驟 2) 執行下面語法, 透過動態 SQL, 進行授權即可 :
程式碼
DECLARE V_GRANT_ON_OWNER VARCHAR2(30) := 'B_OwnerName'; V_GRANT_TO_OWNER VARCHAR2(30) := 'A_OwnerName'; -- 查詢來源的所有物件 CURSOR CUR_DATA IS SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_NAME NOT IN '/' AND OBJECT_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION', 'TABLE', 'VIEW'); BEGIN FOR REC_DATA IN CUR_DATA LOOP -- 動態 SQL 進行授權 EXECUTE IMMEDIATE 'GRANT ALL ON ' || V_GRANT_ON_OWNER || '.' || REC_DATA.OBJECT_NAME || ' TO ' ||V_GRANT_TO_OWNER; END LOOP; END;
如此, 是不是很方便又快速達到我們要的需求了.