oracle中,建立其他使用者表的對應檢視
需求是這樣:在A使用者下,需要批量生成B使用者的所有表對應的檢視。在網上找了很多例子,最後用比較容易的方法解決了。
注意,不能簡單的賦予A使用者DBA許可權,有些操作也是無效的;另外不能授權所有許可權給A使用者,否則A使用者可以刪除B使用者中的表。
方法如下:
1.授權B使用者connect,resource角色許可權,再授予create any view、select any table系統許可權。
2.由於要批量處理,所以用到了儲存過程,在儲存過程中需要查詢dba_tables表,所以需要新增對應許可權:在sys使用者中,grant select any dictionary to B。
3.建立儲存過程:
CREATE OR REPLACE PROCEDURE PROC_CREATE_VIEWS IS
CURSOR CUR IS
SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'B';
CREATE_SQL VARCHAR2(500);
BEGIN
FOR TEMP_CUR IN CUR LOOP
CREATE_SQL := 'create or replace view ' || TEMP_CUR.TABLE_NAME ||
' as select * from B.' || TEMP_CUR.TABLE_NAME;
EXECUTE IMMEDIATE CREATE_SQL;
END LOOP;
END PROC_CREATE_VIEWS;
可根據需要,新增引數,變成通用的儲存過程。
查詢角色對應的系統許可權:select * from dba_sys_privs where grantee='CONNECT'
以上親測可用。