sql >> データベース >  >> RDS >> Oracle

PL/SQLブロックの文字列変数からユーザーを作成します

    PLS-00103:次のいずれかを予期しているときに、記号「CREATE」が発生しました:

    上記のエラーは、 DDLを使用していることが原因です。 PL / SQLの内部 。それをしてはいけない。 EXECUTE IMMEDIATE を(乱用)使用する必要があります DDLステートメントを発行する PL / SQL

    たとえば、

    SQL> DECLARE
      2    my_user     VARCHAR2(30) := 'foo';
      3    my_password VARCHAR2(9)  := '1234';
      4  BEGIN
      5    EXECUTE IMMEDIATE 'CREATE USER '||my_user||' IDENTIFIED BY '||my_password;
      6    EXECUTE IMMEDIATE 'GRANT CREATE SESSION TO '||my_user;
      7  END;
      8  /
    
    PL/SQL procedure successfully completed.
    
    SQL> conn foo/[email protected]
    Connected.
    SQL> SHOW USER
    USER is "FOO"
    

    ドキュメントからのクイックリファレンス 、

    PL/SQLでのDDLおよびSCLステートメントの実行

    動的SQLのみ PL/SQLプログラム単位内で次のタイプの文を実行できます。

    • データ定義言語 (DDL)CREATEなどのステートメント 、DROPGRANT 、およびREVOKE

    • セッション制御言語 (SCL)ALTER SESSIONなどのステートメント およびSET ROLE

    • TABLE SELECTの句 ステートメント

    ちなみに、

    ユーザーの作成と特権の付与は通常、データベース管理です。 DBAによって処理されるタスク。 PL / SQLを介して頻繁に行われるアクティビティではありません プログラム。 DBAはユーザーを作成し、必要な特権を1回限りのアクティビティとして付与します。




    1. 高可用性のためにPostgreSQLを使用してTeamcityをデプロイする方法

    2. T-SQLを使用してSQLServerデータベースをバックアップする方法

    3. PG ::DuplicateTable:エラー:リレーション投稿はすでに存在します

    4. HaproxyとKeepalivedをインストールする方法