This is an old revision of the document!
table
create table schema_object_log ( id number, actiondate date, username varchar2(100), action varchar2(100), objecttype varchar2(100), objectname varchar2(100) );
trigger
CREATE OR REPLACE TRIGGER CREATE_TABLE_TRG
 BEFORE 
 CREATE OR ALTER OR DROP
 ON HR.SCHEMA
declare
  e_invalid_table_name exception;
  pragma exception_init
    (e_invalid_table_name, -20001);
begin
  dbms_output.put_line(ora_sysevent||' '||
                       ora_dict_obj_owner ||' '||
                       ora_dict_obj_name ||' '||
                       ora_dict_obj_type);
                       
if ora_dict_obj_type = 'TABLE' and
   not REGEXP_LIKE(ora_dict_obj_name, '^[[:alpha:]]{3}_[[:alpha:]]{1,}') and
   ora_sysevent in ('CREATE', 'ALTER')
   then
   raise_application_error(-20001, 'table name must look like abc_d');
end if;
insert into schema_object_log (
   id,
   actiondate,
   username,
   action,
   objecttype,
   objectname) values (
   hr_seq.NEXTVAL,
   sysdate,
   ora_dict_obj_owner,
   ora_sysevent,
   ora_dict_obj_type,
   ora_dict_obj_name);
end;