CREATE OR REPLACE FUNCTION DMSYS.blastn_align (
  query_sequence        IN CLOB,
  seqdb_cursor             blast_cur.seqdbcur_t,
  subsequence_from      IN INTEGER   DEFAULT 1,
  subsequence_to        IN INTEGER   DEFAULT -1,
  filter_low_complexity IN INTEGER   DEFAULT 0,
  mask_lower_case       IN INTEGER   DEFAULT 0,
  expect_value          IN NUMBER    DEFAULT 10,
  open_gap_cost         IN INTEGER   DEFAULT 5,
  extend_gap_cost       IN INTEGER   DEFAULT 2,
  mismatch_cost         IN INTEGER   DEFAULT -3,
  match_reward          IN INTEGER   DEFAULT 1,
  word_size             IN INTEGER   DEFAULT 11,
  xdropoff              IN INTEGER   DEFAULT 30,
  final_x_dropoff       IN INTEGER   DEFAULT 50
)
RETURN dmbaos AUTHID CURRENT_user
PARALLEL_ENABLE(PARTITION seqdb_cursor BY ANY)
PIPELINED USING dmbanimp;

我看到这样一段代码,看不懂了,我平时写的都是 
这个格式:
create function tt(ss int)
return decimal
is
begin
.......
.....
return ..
end tt;

谁能告诉我那段红色的代码是什么意思?

解决方案 »

  1.   

    http://www.oracle-developer.net/display.php?id=207
      

  2.   

    CREATE OR REPLACE FUNCTION DMSYS.blastn_align (  --or replace:若DMSYS.blastn_align已存在,则重新编译替换原来的函数
      query_sequence        IN CLOB,   --如果中间的in/out不写,默认为in
      seqdb_cursor            blast_cur.seqdbcur_t, --后面的是自定义类型,属于blast_cur包
      subsequence_from      IN INTEGER  DEFAULT 1, --default:这个参数为可选参数,若不填写,默认为1。下同
      subsequence_to        IN INTEGER  DEFAULT -1, 
      filter_low_complexity IN INTEGER  DEFAULT 0, 
      mask_lower_case      IN INTEGER  DEFAULT 0, 
      expect_value          IN NUMBER    DEFAULT 10, 
      open_gap_cost        IN INTEGER  DEFAULT 5, 
      extend_gap_cost      IN INTEGER  DEFAULT 2, 
      mismatch_cost        IN INTEGER  DEFAULT -3, 
      match_reward          IN INTEGER  DEFAULT 1, 
      word_size            IN INTEGER  DEFAULT 11, 
      xdropoff              IN INTEGER  DEFAULT 30, 
      final_x_dropoff      IN INTEGER  DEFAULT 50 

    RETURN dmbaos AUTHID CURRENT_user --AUTHID CURRENT_user:调用该函数时使用当前登录用户的权限。dmbaos:自定义类型
    PARALLEL_ENABLE(PARTITION seqdb_cursor BY ANY) --PARALLEL_ENABLE:可以并行执行该函数。PARTITION seqdb_cursor BY ANY:指出输入行可被分割为任意数量的数据桶,然后便可对其进行并行处理
    PIPELINED USING dmbanimp; --PIPELINED:可以递增返回数据集
      

  3.   

    定义一个FUCTION 就像java中的借口方法一样。申明参数和返回而已。
      

  4.   

    3楼讲的很好啊,我再补充介绍一下pipelined function吧。
    并行管线函数(parallel pipelined function),即Oracle能动态地并行执行存储函数。根据2楼提供的链接地址指出,从oracle8.0开始可以从集合或者虚拟表中查询数据,到8i的时候很流行这样处理,但是这些集合和虚拟表需要耗费大量的内存,而并行管线函数提出后节省了这种内存消耗,它是便构建边返回结果,就像管道一样将数据一条条送给你,比传统的游标快捷多了。举个例子说,一个查询结果要等5秒返回,传统是等5秒得到所有结果,用了并行管线函数就是实时的返回结果,5秒内不停地给你记录。大概的作用就是这样吧。具体还是看oracle官网讲的详细,还有例子。