0

PL/SQL クライアントではなく、スクリプト ファイルで oracle 変数を使用して 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'
...
4

1 に答える 1

0

DDL 呼び出しの場合、ユーザー名を引用符で囲んではなりません。

define var DBUSERNAME = 'AAA';

CREATE USER &DBUSERNAME PROFILE "DEFAULT" ...

二重引用符で囲むことは許容されますが、将来のケースの問題を回避するために名前が大文字に設定されることが確実な場合にのみ行うことをお勧めします-それを避けるために引用符をスキップすることをお勧めします. create(奇妙な名前のものが何もない限り、呼び出しでプロファイル、パスワードなどを二重引用符で囲む必要はありませんが、get_ddl安全のために常に含まれているようなユーティリティです)。とにかく大文字でない場合、プロシージャー呼び出しは名前を認識しない可能性があります。

スクリプト内で一重引用符が必要な場所は、パラメータとして文字列を渡すGrantSystemPrivandの呼び出しだけです。grant_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;
/

于 2012-12-10T09:45:03.003 に答える