Drop user, create user and grant permission with PL/SQL code : Execute immediate « PL SQL Statements « Oracle PL/SQL Tutorial






SQL>
SQL> DEF username = plsql
SQL> DEF default_ts = USERS
SQL> DEF temp_ts = TEMP
SQL>
SQL> SET FEEDBACK OFF SERVEROUTPUT ON VERIFY OFF TERMOUT OFF
SQL>
SQL> DECLARE
  2     v_count       INTEGER        := 0;
  3     v_statement   VARCHAR2 (500);
  4  BEGIN
  5
  6     SELECT COUNT (1) INTO v_count FROM dba_users
  7      WHERE username = UPPER ('&username');
  8
  9     IF v_count != 0
 10     THEN
 11        EXECUTE IMMEDIATE ('DROP USER &username CASCADE');
 12     END IF;
 13
 14     v_count := 0;
 15
 16     v_statement :=
 17           'CREATE USER &username IDENTIFIED BY oracle'
 18        || ' DEFAULT TABLESPACE &default_ts'
 19        || ' TEMPORARY TABLESPACE &temp_ts'
 20        || ' QUOTA UNLIMITED ON &default_ts'
 21        || ' ACCOUNT UNLOCK';
 22
 23     EXECUTE IMMEDIATE (v_statement);
 24
 25     -- Grant permissions
 26     EXECUTE IMMEDIATE ('GRANT connect, resource TO &username');
 27     EXECUTE IMMEDIATE ('GRANT CTXAPP TO &username');
 28
 29     DBMS_OUTPUT.put_line ('  ');
 30     DBMS_OUTPUT.put_line ('User &username created successfully');
 31     DBMS_OUTPUT.put_line ('  ');
 32
 33  EXCEPTION
 34     WHEN OTHERS
 35     THEN
 36        DBMS_OUTPUT.put_line (SQLERRM);
 37        DBMS_OUTPUT.put_line ('   ');
 38  END;
 39  /
User plsql created successfully
SQL>
SQL> SET FEEDBACK ON TERMOUT ON
SQL>
SQL>
SQL>








22.16.Execute immediate
22.16.1.Simple EXECUTE IMMEDIATE
22.16.2.Call EXECUTE IMMEDIATE in Pl/SQL block
22.16.3.Execute sql statement in a procedure
22.16.4.'execute immediate in' action
22.16.5.Define a procedure to drop a database object
22.16.6.Create a function to count table row
22.16.7.Use procedure to create an index dynamically
22.16.8.Call function and get result by using 'EXECUTE IMMEDIATE'
22.16.9.EXECUTE IMMEDIATE dynamic sql to alter session
22.16.10.Use 'execute immediate' to run a insert statement
22.16.11.select into rowtype then use it in 'execute immediate'
22.16.12.Quotation string
22.16.13.Use 'EXECUTE IMMEDIATE' to execute an update statement
22.16.14.Wrap 'EXECUTE IMMEDIATE' for current user
22.16.15.Wrap statement with 'BEGIN...END'
22.16.16.Catch exception from 'EXECUTE IMMEDIATE'
22.16.17.EXECUTE IMMEDIATE USING IN
22.16.18.Drop user, create user and grant permission with PL/SQL code
22.16.19.execute immediate into
22.16.20.Update row with 'execute immediate'