Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669756
  • 博文数量: 759
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4845
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 13:51
文章分类

全部博文(759)

文章存档

2011年(1)

2008年(758)

我的朋友

分类:

2008-10-27 13:57:31


  支持将modplsql Apache模块作为Apache Web和数据库PL/SQL包过程之间的主接口。
  
  有时候在modplsql的约束下工作是可能会比较困难。它在端Web开发平台强迫参数的数量、类型和每个参数名字。由于PL/SQL语言的是强类型的并且是基于参数的个数和类型.过载(overload)的,所以它就成了一个限制。
  
  例如,如果你对modplsql模块发出一个Web请求foo?a=1&b=2,那么modplsql引擎就会寻找匹配签名foo(a,b)的PL/SQL过程。如果你再添加一个参数&c=3,查找就会失败并返回一个400错误。如果你试图传入名字一样的多个变量(典型的使用复选框的情况),比如说a=2&b=3,查找就会失败,除非a是对一个数组类型的映射。
  
  Modplsql的开发人员已经意识到了这个限制,在严格匹配之外又添加了指定灵活参数传递的能力。如果需要请求modplsql完成灵活参数传递,在过程名的前面加一个惊叹号(!)即可。这样就会告诉modplsql首先寻找带两个参数的方法,然后是老的那个四参数的方法,其中所有的参数都通过数组传递,例如:
  
  create or replace procedure flex2
  (
    name_arrayowa_util.vc_arr,
    value_arrayowa_util.vc_arr
  )
  is
  begin
     htp.p('
    ');
         for i in 1..name_array.count loop
          htp.p('
  • '||name_array(i)||'='||value_array(i)||'
  • ');
        end loop;
        htp.p('
');
  end;
  /
  show errors;
  
  如果你指定类似的URL的话,这个过程就会被调用。Name_array由数组a、b、b、c填充;在这里是由1、2、3、4填充的。你实际上可以用任何TABLE OF…数组作为一个参数而不仅限于这里所指定的这些。
  
  老的四参数格式只有在新数据库中没有发现两参数格式的时候才会用到,但是由于向后兼容的原因它依然被支持:
  
  create or replace procedure flex4
  (
    num_entries number,
    name_array in owa_util.vc_arr,
    value_array in owa_util.vc_arr,
    reserved in owa_util.vc_arr
  )
  is
  begin
    htp.p('
    ');
        for i in 1..num_entries loop
          htp.p('
  • '||name_array(i)||'='||value_array(i)||'
  • ');
        end loop;
        htp.p('
');
  end flex4;
  /
  show errors;
【责编:admin】

--------------------next---------------------

阅读(329) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~