• 关于oracle中table函数的使用


    使用oracle的table函数,查询函数返回的结果集,就如同查询普通表一样查询返回的结果集。

    说明:  1、表函数可接受查询语句或游标作为输入参数,并可输出多行数据。

          2、该函数可以平行执行,并可持续输出数据流,被称作管道式输出。

         3、应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表。

    优势:  1、一些复杂的公共信息,但通过建立视图又实现不了,此时可以考虑使用管道输出。

         2、涉及运算较多,写个简单SQL实现起来较为麻烦,用table可以实现。

    使用步骤:1、创建一个object类型的数据库类型对象(注意:此类型必须定义为数据库对象级别的类型,而不能定义包、函数级别的类型。否则,函数外部代码是无法识别该类型的)。  

        CREATE OR REPLACE TYPE pay_code_obj_row AS OBJECT (

          PAY_APPL_CODE VARCHAR2(100)--付款申请号
        );

        2、创建一个嵌套表类型的数据库类型对象,该类型也将用作函数中定义的返回类型(注意:此类型也必须定义为数据库对象级别的类型)。

        CREATE OR REPLACE TYPE pay_code_table IS TABLE OF pay_code_obj_row;

         3、在函数中应用。

        create or replace function F_BPC_GET_PAYBILLID(

        BUDGET_DEPART_ID in VARCHAR2, --预算使用部门
         PAY_BILL_TYPE in NUMBER--支付类别
         )
         return pay_code_table
         as
         t_pay_appl_code pay_code_table;
         begin
         if PAY_BILL_TYPE=51 then
         select pay_code_obj_row(a.pay_appl_code) bulk collect
         into t_pay_appl_code from T_BPC_BU_NEW_PAY_PAY_D a;
         end if;
         return t_pay_appl_code;
         end F_BPC_GET_PAYBILLID;

    小结:使用此函数,在函数中不能包含DML操作。除非在该函数定义为Oracle自治事务,即在声明函数时加上: PRAGMA AUTONOMOUS_TRANSACTION; 并在执行完DML后COMMIT。

  • 相关阅读:
    .NET拾忆:FileSystemWatcher 文件监控
    .NET拾忆:EventLog(Windows事件日志监控)
    MSSqlServer 主从同步复制原理(发布/订阅)
    MSSqlServer 发布/订阅配置(主从同步)
    Entity Framework Code First(Mysql)
    .Net拾忆:Asp.net请求管道
    http://blog.csdn.net/dianhuiren/article/details/7543886 该作者对操作系统底层研究较深
    page cache 与 page buffer 转
    linux free命令中buffer与cache的区别
    Nginx重写规则指南 转
  • 原文地址:https://www.cnblogs.com/cxyad/p/9788330.html
Copyright © 2020-2023  润新知