Oracle利用函數實現多行數據合並的效果


做了兩天,終於把一個要的顯示結果做出來了。。。
這里只是把我的學習過程總結一下,對那些需要的人提供幫助!

前提:
公司讓我們新人陪服務端到手機端的xml文件,說白了就是ORM映射的原理,但是略有不同,需要手動的去寫Oracle的腳本代碼。其中有個字段需要把各個列的數據合並。
就是把上圖中的YPTSFLMC的字段合並成一行,查過很對的資料,其中最簡單用Oracle自帶的wm_concat函數了,但是我查的數據太多了,用wm_concat函數做不出來,只能自己手寫一個自定義函數。

首先先看一下代碼:

 1 /* Formatted on 2013-1-11 13:23:55 (QP5 v5.185.11230.41888) */
 2 CREATE OR REPLACE FUNCTION TypeStr (MEDCODE VARCHAR2)
 3    RETURN VARCHAR2
 4 AS
 5    STR   VARCHAR2 (1000);                                           /*返回的數據集*/
 6 BEGIN
 7    DECLARE
 8       v_medCode VARCHAR2 (100);                                 /*存放臨時變量的地方*/
 9 
10       CURSOR D_cursor
11       IS
12         SELECT T.STYPE_NAME
13         FROM HEALIDEA_MEDICINE_TYPE_SPECIAL T,HEALIDEA_MEDICINE_STYPE S
14         WHERE (S.MED_STYPE_CODE=T.STYPE_CODE) AND (S.MED_CODE=MEDCODE);
15    BEGIN
16       OPEN D_cursor;
17     loop
18     fetch D_cursor into v_medCode;
19     EXIT WHEN D_cursor%NOTFOUND;
20     if length(STR) > 0 THEN
21        STR := STR ||','|| v_medCode;
22     ELSE
23        STR := STR || v_medCode;
24     END IF;
25     END LOOP;
26     close D_cursor;
27     end;
28     RETURN STR;
29 END TypeStr;

函數的基本意思是根據MEDCODE來查詢所有的單列結果集,在吧這個單列的結果集拼接起來做成一行。如果你看不懂的話,那先學習一下Oracle的基本語法吧,還有游標(其實我自己也是剛剛接觸Oracle不到半個月,原本學習的是sql server,公司用的數據庫是oracle,入公司隨俗吧)。

小問題:
在測試的階段,還是有出現了一個小問題,就是本來是顯示兩條數據的,現在用自己定義的函數,雖然把兩個字段合並了,但是顯示的數據還是兩條。如圖:

難道自己寫了半天的函數就這么廢掉了,幸好腦子機靈,想到了Oracle也有Distinct這個關鍵字。

結果:

這個就是我想要的數據了,哈哈成功的喜悅呀

本來也是剛剛接觸Oracle不久,還有很多的問題也是和同事一起探討中得到的答案。如果有什么不對,請指出,本人會及時改正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM