2012-12-10 37 views
0

我想在腳本文件中創建一個oracle變量的oracle用戶,而不是PL/SQL客戶端。Oracle - 如何使用oracle varialbe創建oracle用戶?

是這樣的:

define var DBUSERNAME = 'AAA'; 

CREATE USER '&DBUSERNAME' PROFILE "DEFAULT" IDENTIFIED BY "pwd123" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK 
BEGIN 
DBMS_WM.GrantSystemPriv('ACCESS_ANY_WORKSPACE', '&DBUSERNAME', 'NO'); 
END; 

GRANT ADMINISTER ANY SQL TUNING SET TO '&DBUSERNAME' 
GRANT ADMINISTER DATABASE TRIGGER TO '&DBUSERNAME' 
BEGIN 
dbms_resource_manager_privs.grant_system_privilege(privilege_name=>'ADMINISTER_RESOURCE_MANAGER', grantee_name=>'&DBUSERNAME', admin_option=>FALSE); 
END; 

GRANT ADMINISTER SQL TUNING SET TO '&DBUSERNAME' 
GRANT ADVISOR TO '&DBUSERNAME' 
... 

任何人都可以給我一些建議嗎?

謝謝。

回答

0

對於DDL呼叫的用戶名不應該在報價:

define var DBUSERNAME = 'AAA'; 

CREATE USER &DBUSERNAME PROFILE "DEFAULT" ... 

這是可以接受的它是在引號,但是我建議你只能做,如果你」請確保該名稱設置爲大寫以避免未來的案例問題 - 最好避免使用引號以避免此問題。 (只要你沒有任何奇怪的名字,你可能不需要在create調用中圍繞配置文件中的雙引號,密碼等,但get_ddl等實用程序總是包含它們以保證安全)。儘管如果他們不是大寫的,那麼程序調用可能不會識別這個名字。

腳本中只需要單引號的地方就在GrantSystemPrivgrant_system_privilege的調用中,在那裏你傳遞一個字符串作爲參數。

您還缺少一個分號的DDL語句後,你的匿名PL/SQL塊後終止/

GRANT ADMINISTER DATABASE TRIGGER TO &DBUSERNAME; 

BEGIN 
    dbms_resource_manager_privs.grant_system_privilege(
     privilege_name=>'ADMINISTER_RESOURCE_MANAGER', 
     grantee_name=>'&DBUSERNAME', 
     admin_option=>FALSE); 
END; 
/