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
などのステートメント 、DROP
、GRANT
、およびREVOKE
セッション制御言語 (SCL)
ALTER SESSION
などのステートメント およびSET ROLE
TABLE
SELECT
の句 ステートメント
ちなみに、
ユーザーの作成と特権の付与は通常、データベース管理です。 DBAによって処理されるタスク。 PL / SQLを介して頻繁に行われるアクティビティではありません プログラム。 DBAはユーザーを作成し、必要な特権を1回限りのアクティビティとして付与します。