解決字串連線設定間隔符的問題
Oracle10g提供了字串連線的功能,使用WMSYS.WM_CONCAT(TNAME)就可以實現這個功能。不過在文中也提到了,利用Oracle提供的方法只能使用逗號作為字串的分隔符。
10g新增功能實現字串連線:http://yangtingkun.itpub.net/post/468/484171
對字串的“sum”——在Oracle中自定義聚集函式的例子:http://yangtingkun.itpub.net/post/468/3380
使用自定義聚集函式的方法,可以方便的設定任何的字元作為字串的間隔符。不過如果間隔符經常的發生變化,那麼每次重建自定義聚集函式,或者為每個不同的間隔符建立一個函式的方法就顯得過於麻煩了。
其實解決方法很簡單,只需要額外建立一個包來設定間隔字元:
SQL> CREATE OR REPLACE PACKAGE P_LINK AS
2 V_SEP VARCHAR2(1) DEFAULT ',';
3 END;
4 /
程式包已建立。
SQL> CREATE OR REPLACE TYPE T_LINK AS OBJECT (
2 STR VARCHAR2(32767),
3 STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER,
4 MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER,
5 MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER,
6 MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER
7 )
8 /
型別已建立。
SQL> CREATE OR REPLACE TYPE BODY T_LINK IS
2 STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT T_LINK) RETURN NUMBER IS
3 BEGIN
4 SCTX := T_LINK(NULL);
5 RETURN ODCICONST.SUCCESS;
6 END;
7
8 MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER IS
9 BEGIN
10 SELF.STR := SELF.STR || VALUE || P_LINK.V_SEP;
11 RETURN ODCICONST.SUCCESS;
12 END;
13
14 MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER IS
15 BEGIN
16 RETURNVALUE := SUBSTR(SELF.STR, 1, LENGTH(SELF.STR) - 1);
17 RETURN ODCICONST.SUCCESS;
18 END;
19
20 MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER IS
21 BEGIN
22 NULL;
23 RETURN ODCICONST.SUCCESS;
24 END;
25 END;
26 /
型別主體已建立。
SQL> CREATE OR REPLACE FUNCTION F_LINK(P_STR VARCHAR2) RETURN VARCHAR2
2 AGGREGATE USING T_LINK;
3 /
函式已建立。
預設情況下,分隔符為逗號,如果需要設定其他字元為分隔符,只需要對PACKAGE中的變數賦值即可:
SQL> SELECT F_LINK(TNAME) FROM TAB;
F_LINK(TNAME)
-------------------------------------------------------------------------------------------
CHAINED_ROWS,T_EXTERNAL,T_SESSION_STAT,T_TEMP2,T_INDEX_ORG,T_EXTERNAL2,T_INTER,T1,T2
SQL> EXEC P_LINK.V_SEP := '|'
PL/SQL 過程已成功完成。
SQL> SELECT F_LINK(TNAME) FROM TAB;
F_LINK(TNAME)
-------------------------------------------------------------------------------------------
CHAINED_ROWS|T_EXTERNAL|T_SESSION_STAT|T_TEMP2|T_INDEX_ORG|T_EXTERNAL2|T_INTER|T1|T2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-594775/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SCSS 字串連線符CSS字串
- 解決代理連線超時問題
- 解決oracle網路連線問題Oracle
- 字串連線超長的解決(二)字串
- 字串連線超長的解決(一)字串
- 解決mysql不能遠端連線的問題MySql
- CSS設定文字之間的間隔CSS
- SQL連線符與使用字串SQL字串
- 使用回溯演算法解決N皇后問題以及間隔排列問題演算法
- 資料庫中字串連線符的使用資料庫字串
- ASP.NET 2.0中連線字串的設定ASP.NET字串
- 設定autotrace的報錯問題解決
- 代理伺服器的連線問題及解決伺服器
- Mac出現WiFi連線問題怎麼辦 Mac WiFi連線問題解決方法MacWiFi
- 設定mysql允許外部IP連線的解決方法MySql
- linq如何設定連線資料庫的字串資料庫字串
- 解決git下載時斷開連線的問題Git
- 解決Xmanager連線HPUX顯示亂碼的問題UX
- 解決PowerDesigner中DBMS設定的問題
- C語言巨集定義##連線符和#符的使用C語言
- Spring Batch中管理長時間執行作業:解決連線問題SpringBAT
- ISCSI碟符飄逸問題解決
- 如何重置Mac的藍芽模組以解決連線問題Mac藍芽模組
- 請教關於資料庫連線池的設定問題?資料庫
- Hue的Impala模組沒有釋放連線的問題解決
- 理解oracle的網路結構 解決你的連線問題Oracle
- telnet、ftp連線速度慢的問題的解決(轉)FTP
- 機器學習,詳解SVM軟間隔與對偶問題機器學習
- 【LaTeX入門】07、水平間隔、豎直間隔等命令設定
- 輕鬆解決Github連線緩慢、圖裂問題Github
- Xshell連線Linux慢問題解決辦法Linux
- 在Oracle網路結構中解決連線問題Oracle
- 解決戶端連線CentOS系統亂碼問題CentOS
- 轉 監聽器連線常見的問題及其解決方法
- 在Oracle的網路結構中解決連線問題(轉)Oracle
- docker下mysql連線數修改後不生效問題的解決DockerMySql
- 解決UILable標點符號居中的問題UI符號
- Windows無法配置此無線連線這個問題的解決辦法Windows