ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 实现Oracle对ldap数据的各类操作

实现Oracle对ldap数据的各类操作

原创 Linux操作系统 作者:regonly1 时间:2009-03-10 14:42:16 0 删除 编辑

 

在Oracle下实现对ldap数据的操作

当然,大前提是ldap和数据库之间的网络是要通的。

Oracle连接ldap的步骤:
首先用dbms_ldap.init(host, port)进行初始化。
该函数返回一个dbms_ldap.session类型的句柄。
初始化后开始用用户名和密码去登录ldap:dbms_ldap.simple_bind_s(session, user, password);
这个函数中的session即前面init函数返回的值。
simple_bind_s这个函数又返回一个状态码,如果成功就返回0.
到这里,ldap的连接已经完成。

下面就是对ldap数据的操作了。
首先是添加:dbms_ldap.add_s();
Oracle对ldap数据的添加过程如下:
1、定义一个要添加的数据集
l_array dbms_ldap.mod_array;
l_array := dbms_ldap.create_mod_array(5);--5是指数组个数

2、指定要增加的属性及属性的值
l_add_vals dbms_ldap.string_collection;
产品属性
l_add_vals(1) := '2009-01-01';
dbms_ldap.populate_mod_array(l_array, dbms_ldap.mod_add, 'activedate', l_add_vals);
l_add_vals(1) := '2019-01-01';
dbms_ldap.populate_mod_array(l_array, dbms_ldap.mod_add, 'inactivedate', l_add_vals);
公共属性
l_add_vals(1) := 'top';
l_add_vals(2) := 'subproduct';
dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'objectclass', l_add_vals);

相当于把所有的这些值都push到l_array这个堆栈里面去了,最后再统一地对堆栈里面的数据进行一次性处理:
dbms_ldap.add_s(l_session, l_userdn, l_array);
l_userdn是指定要添加的节点dn。
我们要在“11040320102052544C21B7F8”这个机顶盒下,增加82303601这个产品,则就应该如下:
'productid=82303601, stbid=11040320102052544C21B7F8,cn=Subscriber, l=ipauth,dc=iptv,dc=com'
这样,如果之前ldap中没有这个节点的话就会增加这么一条,如果已经存在,则会报“already exist”这样的信息。

最后一步,断开与ldap的连接
dbms_ldap.unbind_s(l_session);

详细的操作过程
create or replace procedure w_proc_ldapadd(ldap_host   varchar2,
                      ldap_port   varchar2 default '389',
                      ldap_user   varchar2 default 'cn=manager',
                      ldap_passwd varchar2 default 'onewaveinc',
                      ldap_userdn varchar2,  --指定要增加的节点
                      active_date date  , 
                      inactive_date date
                      ) as
/*Created by lyon@20090306
*  注意:该存储过程对ldap操作的权限很大,需要谨慎操作
*/
    l_ldap_host   varchar2(256) := ldap_host; 
    l_ldap_port    varchar2(256) := ldap_port; 
    l_ldap_user   varchar2(256) := ldap_user; 
    l_ldap_passwd varchar2(256) := ldap_passwd;

    l_retval            pls_integer;
    l_session        dbms_ldap.session;
    l_add_vals    dbms_ldap.string_collection;
    v_inactivedate varchar2(14) := to_char(inactive_date, 'yyyymmddhh24mi');
    v_activedate varchar2(14) := to_char(active_date, 'yyyymmddhh24mi');

    l_array    dbms_ldap.MOD_ARRAY;
begin
    dbms_ldap.use_exception := true;

    begin-- 连接ldap服务器
            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(5);

     l_add_vals(1) := v_inactivedate;
    dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'inactivedate', l_add_vals);

    l_add_vals(1) := v_activedate;
    dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'activedate', l_add_vals);

    l_add_vals(1) := 'top';
    l_add_vals(2) := 'subproduct';
    dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'objectclass', l_add_vals);

    l_retval := dbms_ldap.add_s(l_session, ldap_userdn, l_array);
    dbms_ldap.free_mod_array(l_array); --释放数组
    dbms_output.put_line(l_retval);

    -- 断开与ldap的连接
    l_retval := dbms_ldap.unbind_s(l_session);
end w_proc_ldapadd;

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-566581/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1034075