PLSQL流函数代码 540页 【我】

540页 流函数代码

-- Create table
create table STOCKTABLE
(
  TICKER      VARCHAR2(10),
  TRADE_DATE  DATE,
  OPEN_PRICE  NUMBER,
  CLOSE_PRICE NUMBER
)
tablespace JTORDER
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    minextents 1
    maxextents unlimited
  );

-- Create table
create table TICKERTABLE
(
  TICKER    VARCHAR2(10),
  PRICEDATE DATE,
  PRICETYPE VARCHAR2(1),
  PRICE     NUMBER
)
tablespace JTORDER
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    minextents 1
    maxextents unlimited
  );



CREATE TYPE TickerType AS OBJECT(
     ticker VARCHAR2(10),
     pricedate DATE,
     pricetype VARCHAR2(1),
     price NUMBER);
     
CREATE TYPE TickerTypeSet AS TABLE OF TickerType;
     
CREATE PACKAGE refcur_pkg
IS
   TYPE refcur_t IS REF CURSOR RETURN StockTable%ROWTYPE;
END refcur_pkg;


CREATE FUNCTION stockpivot(dataset refcur_pkg.refcur_t)
         RETURN TickerTypeSet
IS
    l_row_as_object tickertype := tickertype(NULL,null,null,null);
    l_row_from_query dataset%ROWTYPE;
    retval tickertypeset := tickertypeset();
BEGIN
    LOOP 
           FETCH dataset
                 INTO l_row_from_query;
           EXIT WHEN dataset%NOTFOUND;
           l_row_as_object.ticker := l_row_from_query.ticker;
           retval.EXTEND;
           retval(retval.LAST) := l_row_as_object;
    END LOOP;
    CLOSE dataset;
    RETURN retval;
END stockpivot;


BEGIN
    INSERT INTO tickertable
         select * from TABLE (stockpivot(CURSOR(SELECT * from stocktable)));

END;
原文地址:https://www.cnblogs.com/libin6505/p/11805798.html