PROCEDURE DELETE_ROWS
   ( p_table_name IN varchar2)
   IS
   statement_cursor integer;
   rows_del         number;
BEGIN
   statement_cursor := dbms_sql.open_cursor;
   dbms_sql.parse(statement_cursor, 
                  'delete from '||p_table_name,
                  dbms_sql.native);
   rows_del := dbms_sql.execute(statement_cursor);
   -- dbms_sql.fetch_rows
   dbms_output.put_line('zeilen geloescht '||rows_del);
   dbms_sql.close_cursor(statement_cursor);
END; -- Procedure
PROCEDURE COUNT_ROWS
   ( p_table_name in varchar2
    )
   IS
   row_count number;
   sql_code  varchar2(1000);
BEGIN
   sql_code := 'select count(*) from '||p_table_name;
   -- objekt namen koennen nicht als bind variablen verwendet werden
   execute immediate sql_code into row_count;
   dbms_output.put_line(p_table_name ||' contains '
                        ||row_count||' rows');
END; -- Procedure
CREATE OR REPLACE PROCEDURE CREATE_DB_USER 
authid current_user AS 

/* 
cursor ueber alle employees der IT Abteilung
und fuer jeden dieser employees einen db user anlegen

+ falls es den benutzer schon gibt, nichts machen bzw exception
fangen
*/

cursor c_emp_it is
 select first_name,
           last_name,
           salary,
           department_name
      from hr.departments d join hr.employees e
        on d.department_id = e.department_id
        where department_name = 'IT';

v_cur integer;
v_user_count number;
v_sql varchar2(100);
v_ret number;
BEGIN
  
  for r_emp in c_emp_it loop
    dbms_output.put_line(r_emp.last_name);
    select count(*) into v_user_count 
      from all_users where 
       username = upper(r_emp.last_name);
       
    if v_user_count = 0 then    
      execute immediate 'create user '||r_emp.last_name||
      ' identified by '||r_emp.last_name;
      dbms_output.put_line('User '||upper(r_emp.last_name)|| 
         ' created');
    end if;  
      
  end loop;
END CREATE_DB_USER;