• Oracle管道函数示例


    Oracle的管道函数需要定义下面的三样:

    Record/Object Type:定义一个Record或Object类型的变量,这个变量用于表示返回结果集的一行数据,有点像C#中的DataRow类。

    Table Type:定义一个集合类型,这个类型由Record/Object Type填充。这个类型也可以理解为一个Record/Object的数组。

    Function:定义个返回类型为Table Type的函数。这个函数负责生成结果集。

    上述三个数据库对象一般定义在一个包内,但是Object Type不能定义在包内,需要在包外部定义,包内引用。

    示例:

     1 CREATE OR REPLACE PACKAGE PCK_TEST AS
     2 
     3 TYPE TYPE_TEST IS RECORD
     4 (
     5   R_VAL         NUMBER,
     6   DATE_VALUE    DATE,
     7   TEST_FIELD    VARCHAR2(50 BYTE)
     8 );
     9 
    10 TYPE TABLE_TEST IS TABLE OF TYPE_TEST;
    11 
    12 FUNCTION F_TEST_TABLE(P_DATE IN VARCHAR2) RETURN TABLE_TEST PIPELINED;
    13 
    14 END PCK_TEST;
     1 CREATE OR REPLACE PACKAGE BODY PCK_TEST AS
     2 
     3 FUNCTION F_TEST_TABLE(P_DATE IN VARCHAR2) RETURN TABLE_TEST PIPELINED IS
     4 
     5   L_ROW   TYPE_TEST;
     6   
     7 BEGIN
     8 
     9   FOR I IN 1..10
    10   LOOP
    11     
    12     L_ROW.R_VAL := I;
    13     L_ROW.DATE_VALUE := TO_DATE(P_DATE,'YYYY-MM-DD HH24:MI:SS');
    14     L_ROW.TEST_FIELD := 'TEST';
    15     ---如果TYPE_TEST定义为Object类型,则可以这么赋值
    16     ---L_ROW := TYPE_TEST(I,TO_DATE(P_DATE,'YYYY-MM-DD HH24:MI:SS'),'TEST')
    17     PIPE ROW(L_ROW);
    18     
    19     
    20   END LOOP;
    21   RETURN;
    22 
    23 EXCEPTION
    24   --YOUR EXCEPTION SQL STATEMENT
    25   WHEN OTHERS THEN RETURN;
    26 END F_TEST_TABLE;
    27 
    28 
    29 END PCK_TEST;

    调用函数:

    调用时需要与Table关键字配合使用,如下图所示。

  • 相关阅读:
    GIS 空间分析案例教程-坐标高斯投影正反算
    GIS 空间分析案例分析-错误排除经验总结
    第一个Json.Net Demo
    点到折线最短距离所在点距离折线起点的累积距离
    使用Proj.Net创建空间参考
    C#通过存储过程进行查询
    分幅输出影像瓦片
    ArcEngine和GDAL读写栅格数据机制对比(二)—— IPixelBlock读写栅格
    Web开发学习
    [3D]绘制XYZ小坐标轴
  • 原文地址:https://www.cnblogs.com/shenyuelan/p/3317930.html
Copyright © 2020-2023  润新知