dbms_ldap實現ldap資料修改

regonly1發表於2009-03-10

另一個儲存過程,實現ldap資料的修改,具體各步驟含義已經在前面一篇中說明了,這裡跟前面不同之處主要就是呼叫的函式不同了:前面是add_s(),這裡是modify_s():
create or replace procedure w_proc_ldapmodify(ldap_host   varchar2,
           ldap_port   varchar2 default '389',
           ldap_user   varchar2 default 'cn=manager',
           ldap_passwd varchar2 default '123456',
                                            ldap_userdn varchar2,  --指定要修改的節點
           mod_attr varchar2,  --指定要修改的屬性
           mod_values varchar2  --指定修改後的值
                                            ) as
   l_ldap_host   varchar2(256) := ldap_host; --'218.108.243.40';
   l_ldap_port    varchar2(256) := ldap_port; --'389';
   l_ldap_user   varchar2(256) := ldap_user; --'cn=manager';
   l_ldap_passwd varchar2(256) := ldap_passwd; --'onewaveinc';

   l_retval            pls_integer;
   l_session        dbms_ldap.session;
   l_message     dbms_ldap.message;
   l_mod_vals    dbms_ldap.string_collection; 

   l_array    dbms_ldap.MOD_ARRAY;
   v_mod_attr VARCHAR(256) := mod_attr;
begin
   dbms_ldap.use_exception := true;
      l_mod_vals(1) := mod_values;
     
      if ldap_host in('218.108.236.24','218.108.236.27', '218.108.236.29', '218.108.236.30') then
            dbms_output.put_line('Slave LDAP could not be midified!'); --
            return;
      end if;

   begin-- connect to the ldap server.
   l_session := dbms_ldap.init(l_ldap_host, l_ldap_port);
   l_retval  := dbms_ldap.simple_bind_s(l_session, l_ldap_user, l_ldap_passwd);
   exception when others then
            dbms_output.put_line('coerr');
            return;
   end;

   --修改資料
   l_array := dbms_ldap.create_mod_array(1);
   dbms_ldap.populate_mod_array(l_array,
           dbms_ldap.mod_replace,
           v_mod_attr,
           l_mod_vals);
   l_retval := dbms_ldap.modify_s(l_session, ldap_userdn, l_array);
   dbms_ldap.free_mod_array(l_array);

   -- 斷開與ldap的連線
   l_retval := dbms_ldap.unbind_s(ld => l_session);
end w_proc_ldapmodify;

/*關於以上引數的說明
修改節點 "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中的操作
*/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-566585/,如需轉載,請註明出處,否則將追究法律責任。

相關文章