首页| 新闻| 娱乐| 游戏| 科普| 文学| 编程| 系统| 数据库| 建站| 学院| 产品| 网管| 维修| 办公| 热点
管道化表函数必须返回一个集合。在函数中,PipE ROW 语句被用来返回该集合的单个元素,该函数必须以一个空的 RETURN 语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用 TABLE 操作符从 SQL 查询中调用它。
管道化表函数经常被用来把数据从一种类型转化成另一种类型。
下面是用Pipelined Table实现split函数的示例:
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split PIPELINEDIS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000);BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE j < len LOOP j := INSTR (p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR (p_str, i); PIPE ROW (str); IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); i := j + len1; PIPE ROW (str); END IF; END LOOP; RETURN;END fn_split;/测试:SELECT * FROM TABLE (fn_split ('1;;12;;123;;1234;;12345', ';;'));结果:112123123412345又一个简单的例子:CREATE TYPE mytype AS OBJECT ( field1 NUMBER, field2 VARCHAR2 (50));CREATE TYPE mytypelist AS TABLE OF mytype;CREATE OR REPLACE FUNCTION pipelineme RETURN mytypelist PIPELINEDIS v_mytype mytype;BEGIN FOR v_count IN 1 .. 20 LOOP v_mytype := mytype (v_count, 'Row ' || v_count); PIPE ROW (v_mytype); END LOOP; RETURN;END pipelineme;SELECT * FROM TABLE (pipelineme);FIELD1 FIELD2 ------ ------------------------ 1 Row 1 2 Row 2 3 Row 3 4 Row 4 5 Row 5 6 Row 6 7 Row 7 8 Row 8 9 Row 9 10 Row 10 11 Row 11 12 Row 12 13 Row 13 14 Row 14 15 Row 15 16 Row 16 17 Row 17 18 Row 18 19 Row 19 20 Row 2020 rows selected
练就火眼金睛 十一种常见电脑
打印机共享提示“操作无法完成
如何查找有故障的配件
回眸一笑百魅生,六宫粉黛无颜色
岁月静美,剪一影烟雨江南
芜湖有个“松鼠小镇”
小满:小得盈满,一切刚刚好!
一串串晶莹剔透的葡萄,像一颗颗宝石挂在藤
正宗老北京脆皮烤鸭
人逢知己千杯少,喝酒搞笑图集
搞笑试卷,学生恶搞答题
新闻热点
疑难解答
图片精选
6类网线的完美接法
使用VMM2008 R2管理Hyper-V之1-实
开机黑屏与内存的原因导致DDR2内存
Lua中基本的数据类型、表达式与流
网友关注