哪位高手帮小弟我解释下这段代码

谁帮我解释下这段代码-------cuthere-------DECLAREretvalPLS_INTEGERmy_sessionDBMS_LDAP.sessionldap_

谁帮我解释下这段代码
-------   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, '   ')   ||   ':   '   ||   TO_CHAR(retval));

  DBMS_LDAP.free_mod_array(my_mod);

  retval   :=   DBMS_LDAP.unbind_s(my_session);


  DBMS_OUTPUT.PUT_LINE(RPAD( 'unbind_res   Returns   ',25, '   ')   ||     ':   '   ||   TO_CHAR(retval));

  DBMS_OUTPUT.PUT_LINE( 'Directory   operation   Successful   ..   exiting ');

  --   Handle   Exceptions
  EXCEPTION
    WHEN   OTHERS   THEN

      DBMS_OUTPUT.PUT_LINE( '   Error   code         :   '   ||   TO_CHAR(SQLCODE));
      DBMS_OUTPUT.PUT_LINE( '   Error   Message   :   '   ||   SQLERRM);
      DBMS_OUTPUT.PUT_LINE( '   Exception   encountered   ..   exiting ');

END;
/

[解决办法]
PROCEDURE populate_mod_array
(


modptr IN DBMS_LDAP.MOD_ARRAY,
mod_op IN PLS_INTEGER,
mod_type IN VARCHAR2,
modval IN DBMS_LDAP.STRING_COLLECTION

);
//
modptr The data structure holds a pointer to an LDAP mod array.

mod_op This field specifies the type of modification to perform.

mod_type This field indicates the name of the attribute type to which the modification applies.

modval This field specifies the attribute values to add, delete, or replace. It is for the string values only.
[解决办法]
修改节点 "cn=tigger,cn=users,dc=acme,dc=o "的userpassword和newmail属性.
DBMS_LDAP.populate_mod_array(my_mod, DBMS_LDAP.MOD_REPLACE, 'mail ', my_values);
my_mod存储的对ldap的操作,如上面这句话的意思是 "对mail属性使用my_values的值做替换操作 ",因为ldap的属性值可以是数组,所以是DBMS_LDAP.STRING_COLLECTION类型,然后同样对userpassword属性也是类似操作,最后
retval := DBMS_LDAP.modify_s(my_session, userDN, my_mod);
在节点userDN上执行my_mod中的操作