CREATE OR REPLACE PROCEDURE xx_create_adhocrole ( role_name IN VARCHAR2 , role_display_name IN VARCHAR2 , language IN VARCHAR2 DEFAULT NULL , territory IN VARCHAR2 DEFAULT NULL , role_description IN VARCHAR2 DEFAULT NULL , notification_preference IN VARCHAR2 DEFAULT 'MAILHTML' , role_users IN WF_DIRECTORY.UserTable , email_address IN VARCHAR2 DEFAULT NULL , fax IN VARCHAR2 DEFAULT NULL , status IN VARCHAR2 DEFAULT 'ACTIVE' , expiration_date IN DATE DEFAULT NULL , parent_orig_system IN VARCHAR2 DEFAULT NULL , parent_orig_system_id IN NUMBER DEFAULT NULL , owner_tag IN VARCHAR2 DEFAULT NULL ) IS v_user WF_ROLES.name%TYPE; v_count PLS_INTEGER; e_workflow_error EXCEPTION; PRAGMA EXCEPTION_INIT (e_workflow_error , -20002); BEGIN WF_DIRECTORY.CreateRole ( role_name => role_name , role_display_name => role_display_name , orig_system => 'WF_LOCAL_ROLES' , orig_system_id => 0 , language => language , territory => territory , role_description => role_description , notification_preference => notification_preference , email_address => email_address , fax => fax , status => status , expiration_date => expiration_date , parent_orig_system => parent_orig_system , parent_orig_system_id => parent_orig_system_id , owner_tag => owner_tag ); IF role_users.COUNT > 0 THEN FOR i IN 1 .. role_users.COUNT LOOP BEGIN WF_DIRECTORY.AddUsersToAdHocRole ( role_name => role_name , role_users => role_users(i)); EXCEPTION WHEN e_workflow_error THEN IF (SQLERRM LIKE 'ORA-20002:%3205%') OR (SQLERRM LIKE 'ORA-20002:%4016%') THEN NULL; ELSE RAISE; END IF; WHEN OTHERS THEN RAISE; END; END LOOP; END IF; END xx_create_adhocrole; /