做了兩天,終於把一個要的顯示結果做出來了。。。
這裡只是把我的學習過程總結一下,對那些需要的人提供協助!
前提:
公司讓我們新人陪服務端到手機端的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_cursor11 IS12 SELECT T.STYPE_NAME13 FROM HEALIDEA_MEDICINE_TYPE_SPECIAL T,HEALIDEA_MEDICINE_STYPE S14 WHERE (S.MED_STYPE_CODE=T.STYPE_CODE) AND (S.MED_CODE=MEDCODE);15 BEGIN16 OPEN D_cursor;17 loop18 fetch D_cursor into v_medCode;19 EXIT WHEN D_cursor%NOTFOUND;20 if length(STR) > 0 THEN21 STR := STR ||','|| v_medCode;22 ELSE23 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不久,還有很多的問題也是和同事一起探討中得到的答案。如果有什麼不對,請指出,本人會及時改正!