谁帮我解释下这段代码
------- cut here -------
DECLARE
retval PLS_INTEGER;
my_session DBMS_LDAP.session;
ldap_host VARCHAR2(256);
ldap_port VARCHAR2(256);
ldap_user VARCHAR2(256);
ldap_passwd VARCHAR2(256);
userDN VARCHAR2(256);
newpwd VARCHAR2(256);
newmail VARCHAR2(256);
my_mod DBMS_LDAP.MOD_ARRAY;
my_values DBMS_LDAP.STRING_COLLECTION;
BEGIN
retval := -1;
ldap_host := 'mlc2.acme.org ';
ldap_port := '3060 ';
ldap_user := 'cn=orcladmin ';
ldap_passwd:= 'welcome1 ';
userDN := 'cn=tigger,cn=users,dc=acme,dc=org ';
newpwd := 'welcome1 ';
newmail := 'myaddr@oracle.com ';
DBMS_OUTPUT.PUT_LINE(RPAD( 'LDAP Host ',25, ' ') || ': ' || ldap_host);
DBMS_OUTPUT.PUT_LINE(RPAD( 'LDAP Port ',25, ' ') || ': ' || ldap_port);
DBMS_LDAP.USE_EXCEPTION := TRUE;
my_session := DBMS_LDAP.init(ldap_host,ldap_port);
DBMS_OUTPUT.PUT_LINE (RPAD( 'Ldap session ',25, ' ') || ': ' ||
RAWTOHEX(SUBSTR(my_session,1,8)) || '(returned from init) ');
retval := DBMS_LDAP.simple_bind_s(my_session, ldap_user,ldap_passwd);
DBMS_OUTPUT.PUT_LINE(RPAD( 'simple_bind_s Returns ',25, ' ') || ': ' || TO_CHAR(retval));
my_mod := DBMS_LDAP.create_mod_array(2);
my_values(1) := newpwd;
DBMS_LDAP.populate_mod_array(my_mod, DBMS_LDAP.MOD_REPLACE, 'userpassword ', my_values);
-- Repeat the below lines multiple times to modify several attributes
-- at the same time. Just set the my_values(1) to the new value and change the 3rd
-- parameter of the populate_mod_array to the name of the attribute to modify.
my_values(1) := newmail;
DBMS_LDAP.populate_mod_array(my_mod, DBMS_LDAP.MOD_REPLACE, 'mail ', my_values);
retval := DBMS_LDAP.modify_s(my_session, userDN, my_mod);
DBMS_OUTPUT.PUT_LINE(RPAD( 'modify_s Returns ',25, ' ') || ': '