CREATE USER、GRANT用动态SQL execute immediate sql这样执行还有函数不是这样执行得,好象是要放在dml语句里执行,把你这个改成存储过程就可以call creatuser('ccyy','ccyy')了。

解决方案 »

  1.   

    这样呢?CREATE OR REPLACE PROCEDURE creatuser (username VARCHAR2, passwords VARCHAR2)
    IS
    BEGIN
       EXECUTE IMMEDIATE    ' CREATE USER '
                         || username
                         || '  PROFILE "DEFAULT" '
                         || ' IDENTIFIED BY '
                         || passwords
                         || ' DEFAULT TABLESPACE "USERS" '
                         || 'TEMPORARY TABLESPACE "TEMP" '
                         || 'ACCOUNT UNLOCK';   EXECUTE IMMEDIATE 'GRANT "CONNECT" TO ' || username || ' WITH ADMIN OPTION';   EXECUTE IMMEDIATE 'GRANT "DBA" TO ' || username || ' WITH ADMIN OPTION';   COMMIT;
    EXCEPTION
       WHEN OTHERS
       THEN
          ROLLBACK;
    END creatuser;
    /
      

  2.   

    SQL> conn system/manager
    已连接。
    SQL> create or replace procedure create_user as
      2  begin
      3  execute immediate 'create user temp identified by psw
      4  execute immediate 'grant dba to temp';
      5  end create_user;
      6  /过程已创建。已用时间:  00: 00: 01.61
    SQL> exec create_user;
    BEGIN create_user; END;*
    ERROR 位于第 1 行:
    ORA-01031: 权限不足
    ORA-06512: 在"SYSTEM.CREATE_USER", line 3
    ORA-06512: 在line 1
    已用时间:  00: 00: 00.80
    SQL> grant create user to system;授权成功。已用时间:  00: 00: 00.01
    SQL> exec create_user;PL/SQL 过程已成功完成。已用时间:  00: 00: 00.50
    SQL> select * from all_users;USERNAME                          USER_ID CREATED
    ------------------------------ ---------- ----------
    SYS                                     0 14-11月-00
    SYSTEM                                  5 14-11月-00
    OUTLN                                  11 14-11月-00
    DBSNMP                                 16 14-11月-00
    PLATE                                  41 09-6月 -05
    AURORA$JIS$UTILITY$                    25 14-11月-00
    OSE$HTTP$ADMIN                         26 14-11月-00
    AURORA$ORB$UNAUTHENTICATED             27 14-11月-00
    ORDSYS                                 28 14-11月-00
    ORDPLUGINS                             29 14-11月-00
    MDSYS                                  30 14-11月-00USERNAME                          USER_ID CREATED
    ------------------------------ ---------- ----------
    CTXSYS                                 33 14-11月-00
    SCOTT                                  35 14-11月-00
    ADAMS                                  36 14-11月-00
    JONES                                  37 14-11月-00
    CLARK                                  38 14-11月-00
    BLAKE                                  39 14-11月-00
    MTSSYS                                 40 14-11月-00
    TEMP                                   43 19-10月-05已选择19行。已用时间:  00: 00: 00.71
    SQL> conn temp/psw
    已连接。
    SQL> 执行ddl语句需要使用动态sql
    另:执行ddl语句自动commit;dba角色已经包含了connect功能。