包中函数中定义的管道表,如何处理记录

wanjianjun 2009-02-05 03:19:04

FUNCTION WH_F_INV_GetConvertCarStockID(
StartDate DATE,
EndDate DATE,
CustomID VARCHAR2 := NULL)
RETURN
GetConvertCarStockID_REC_LIST PIPELINED --定义的管道表
AS
AAA VARCHAR2(100);
CUR MYCUR;
REC GetConvertCarStockID_REC;
BEGIN
OPEN CUR FOR
SELECT B0117, 0
FROM B01
INNER JOIN B02
ON B0201 = B0101
WHERE B0204 >= StartDate
AND B0204 <= EndDate
AND NVL(B0210, 0) <> 2
AND NVL(B0211, 0) = 2
AND (B0219 = CustomID
OR CustomID IS NULL) ;

LOOP
FETCH CUR INTO REC ;
EXIT WHEN CUR%NOTFOUND ;
PIPE ROW(REC);
END LOOP;

--前面把记录已经装入申明的REC管道表中,但是后面我需要对记录做进一步处理,如删除,添加等...怎么办? 我函数是写在包中的,
我又不想先创建表结构后来操作数据,只想在包中来完成,因为程序多处调用此函数,我不能把他转为过程来处理,比较麻烦,而在函数中又不支持动态建表.
该怎么办呢?
@RetVal相当于上面我申明的管道表....
下面是MSSQL还未转为ORACLE的代码,应该怎么转,并且不脱离我定义的包,在包中就能完成的....?????


DELETE
FROM @RetVal
WHERE StockID IS NULL
OR StockID IN (SELECT StockID
FROM dbo.WH_FUNC_INV_GetConvertToCarStockID(@StartDate, @EndDate, @CustomID))

INSERT INTO @RetVal(StockID, Flag)
SELECT StockID, 1
FROM @RetVal
GROUP BY StockID

DELETE FROM @RetVal WHERE Flag = 0

RETURN ;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanjianjun 2009-02-10
  • 打赏
  • 举报
回复
nested table/varray
不能满足我的操作目的

我自己用嵌套函数解决了。。。
butchroller 2009-02-06
  • 打赏
  • 举报
回复
可以用nested table/varray。
wanjianjun 2009-02-05
  • 打赏
  • 举报
回复
晕哦.....

哪为高手出来支支招....
watson110 2009-02-05
  • 打赏
  • 举报
回复
定义的管道表?
--这是何物啊
superjava_2006 2009-02-05
  • 打赏
  • 举报
回复
有点晕

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧