Oracle Pipelined Table(轉)
管道化表函式必須返回一個集合。在函式中,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 PIPELINED
IS
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', ';;'));
結果:
1
12
123
1234
12345
又一個簡單的例子: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 20
20 rows selected
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242131/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Pipelined Table Functions(轉)OracleFunction
- oracle cache table(轉)Oracle
- Oracle table selectOracle
- Oracle:TABLE MONITORINGOracle
- plsql 除錯 pipelined 函式SQL除錯函式
- GLOBAL TEMPORARY TABLE(轉)
- ORACLE _small_table_threshold與eventOracle
- Oracle cluster table(1)_概念介紹Oracle
- Oracle Table建立引數說明Oracle
- Analyze table對Oracle效能的提升Oracle
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- oracle truncate table recover(oracle 如何拯救誤操作truncate的表)Oracle
- use azure data studio to create external table for oracleOracle
- 【TABLE】Oracle表資訊收集指令碼Oracle指令碼
- 深入解析 oracle drop table內部原理Oracle
- layui將table轉化表單顯示(即table.render轉為表單展示)UI
- 14_深入解析Oracle table cluster結構Oracle
- Oracle 19c Concepts(02):Tables and Table ClustersOracle
- oracle 19c 無法create table解決Oracle
- 【TABLE】Oracle監控異常的表設計Oracle
- 有關oracle external table的一點測試。Oracle
- Oracle 轉MySqlOracleMySql
- ORACLE TEXT(轉)Oracle
- ORACLE EVENTS(轉)Oracle
- Oracle Partitioning(轉)Oracle
- ORACLE DSI(轉)Oracle
- oracle表空間不足:ORA-01653: unable to extend tableOracle
- Oracle中獲取TABLE的DDL語句的方法Oracle
- flink stream轉table POJO物件遇到的坑POJO物件
- [20220610][轉載]Is my table marked for archive.txtHive
- sap table 分為三種型別(轉)型別
- 利用poi將Html中table轉為ExcelHTMLExcel
- oracle列轉行Oracle
- oracle myintis 轉義Oracle
- Oracle轉換PostgresOracle
- Oracle審計(轉)Oracle
- oracle轉義字元Oracle字元
- Java初探Oracle(轉)JavaOracle