Oracle 函数function返回table--管道化表函数

本文介绍了Oracle数据库中函数如何返回表,特别是管道化表函数的使用,包括定义type行类型、table类型以及如何在function中返回记录表。

Oracle 函数function返回table–管道化表函数

1 、定义type行类型

CREATE OR REPLACE TYPE MESTK_ADMIN.LOTPARAM_TABLE_ROW  FORCE  as object
(
  PARAM_NAME varchar2(100),
  PARAM_VALUE     varchar2(100),
  PARAM_TYPE          varchar2(10)
);

2、定义table类型

CREATE OR REPLACE TYPE MESTK_ADMIN.LOTPARAM_TABLE IS TABLE OF LOTPARAM_table_ROW ;

3、function返回记录表table

CREATE OR REPLACE FUNCTION MESTK_ADMIN.FUN_GETLOTPARAMPROFILE (
   F_ORDER_NO         VARCHAR2,
   F_ORDER_SUB_LOT    VARCHAR2,
   F_CUST_CODE        VARCHAR2)
   RETURN LOTPARAM_TABLE
IS
   TTAB            LOTPARAM_TABLE := LOTPARAM_TABLE ();

   TTAB_INDEX      NUMBER := 1;
   V_Param_Value   VARCHAR2 (100);
   V_TableName     VARCHAR2 (4000);
   query_Count     VARCHAR2 (100) := 'select count(1) from (';
   V_count         NUMBER;
BEGIN
   FOR ROW_CUR_FIRST_INDEX IN (SELECT CUST_CODE,
                                      PARAM_NAME,
                                      NEED_DISPLAY,
                                      QUERY,
                                      PARAM_TYPE
                                 FROM WIP_LOT_PARAMETERS_PROFILE
                                WHERE CUST_CODE IN (F_CUST_CODE, '*'))
   LOOP
      IF ROW_CUR_FIRST_INDEX.NEED_DISPLAY = 'Y'
      THEN
         V_Param_Value := '-';

         V_TableName :=
               ROW_CUR_FIRST_INDEX.QUERY
            || ' WHERE order_No = '''
            || F_ORDER_NO
            || ''' AND ORDER_SUB_LOT = '''
            || F_ORDER_SUB_LOT
            || '''';

         EXECUTE IMMEDIATE query_Count || V_TableName || ')' INTO V_count;

         IF V_count > 0
         THEN
            EXECUTE IMMEDIATE V_TableName || ' AND ROWNUM = 1'
               INTO V_Param_Value;
         END IF;



         TTAB.EXTEND ();

         TTAB (TTAB_INDEX) :=
            LOTPARAM_TABLE_ROW (
               PARAM_NAME    => ROW_CUR_FIRST_INDEX.PARAM_NAME,
               PARAM_VALUE   => V_Param_Value,
               PARAM_TYPE    => ROW_CUR_FIRST_INDEX.PARAM_TYPE);

         TTAB_INDEX := TTAB_INDEX + 1;
      END IF;
   END LOOP;

   RETURN TTAB;
END;
/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值