zoukankan      html  css  js  c++  java
  • 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关键字配合使用,如下图所示。

  • 相关阅读:
    半截水晶头线接激活本地虚拟网卡
    快捷键
    嵌入式系统原理与应用技术(第三版)-读书笔记
    嵌入式基本常识(一)
    PWM输出
    ARM-GPIO
    POI使用
    oracle常见命令
    JS获取contextPath的方法
    JPA自动生成表
  • 原文地址:https://www.cnblogs.com/shenyuelan/p/3317930.html
Copyright © 2011-2022 走看看