科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道利用modplsql使用灵活的参数传递

利用modplsql使用灵活的参数传递

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  Oracle支持将modplsql Apache模块作为Apache Web服务器和数据库PL/SQL包过程之间的主接口。      有时候在modplsql的约束下工作是可能会比较困难。

作者:中国IT实验室 来源:中国IT实验室 2007年9月30日

关键字: SQL 数据库 SQL Server

  • 评论
  • 分享微博
  • 分享邮件

  Oracle支持将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('<ul>');
     for i in 1..name_array.count loop
      htp.p('<li>'||name_array(i)||'='||value_array(i)||'</li>');
    end loop;
    htp.p('</ul>');
  end;
  /
  show errors;
  
  如果你指定类似http://myhost:7777/pls/scott/flex2?a=1&b=2&b=3&c=4....的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('<ul>');
    for i in 1..num_entries loop
      htp.p('<li>'||name_array(i)||'='||value_array(i)||'</li>');
    end loop;
    htp.p('</ul>');
  end flex4;
  /
  show errors;

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件