做了兩天,終於把一個要的顯示結果做出來了。。。
這里只是把我的學習過程總結一下,對那些需要的人提供幫助!
前提:
公司讓我們新人陪服務端到手機端的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不久,還有很多的問題也是和同事一起探討中得到的答案。如果有什么不對,請指出,本人會及時改正!