通過Oracle函數實現.NET String.Format函數的簡單版

來源:互聯網
上載者:User

由於開發需要,想實現一些提示資訊的通用,比如,提示資訊內容:“XXX的值YYY不正確,請檢查並重新輸入!”,那麼,通用的資訊內容就應該為:“{0}的值{1}不正確,請檢查並重新輸入!”。但這個“{0}”和"{1}"怎麼替換掉呢?在.net中,字串有String.Format函數,這樣我們就可以很容易地去根據不同的內容,替換成不一樣的內容,但Oracle裡面還沒有樣的函數(據個人所知,不知道有沒有孤漏寡聞!),但又想用,所以就只能自己寫了。

想了想,有問題啊,且聽我道來:

資訊內容中有多個參數,並且都是用花括弧中帶數字來表示,如{0},{1},{2},那麼,這些參數最好能用數組來表示,但Oracle PL/SQL中有數組嗎?都怪自己平時不努力,書到用時方恨少啊。在網上百穀了一下,Oralce裡面沒有現成的資料類型,只有通過自訂數群組類型(其實是Table表結構類型).如下代碼所示:

CREATE OR REPLACE TYPE stringarrary IS TABLE OF VARCHAR2 (4000);

可是問題又來了,用的時候,怎麼傳值給函數啊?杯具了,糾結了好一會,算了,還是笨一會吧,字串分割好了。那麼這個函數需要什麼東東呢?

1.資訊內容

2.參數列表(多個參數用分割符分開)

3.分割符(當然是跟2中一致的,不然,可就牛頭不對馬嘴了)

開始寫吧,轉頭一想,是不是分成兩個函數會更好呢?一個用於分割返回參數數組列表,另一個專就是調用分割函數得到參數列表後,做替換的動作,最後返回。en,想想不錯,就寫成兩個吧,功能很單純,很天真。

俗話說,他山之石,可以攻玉。百穀了一下,分割函數有現成的,拿來吧,請往下看:

CREATE OR REPLACE FUNCTION stringsplit (SOURCE VARCHAR2, spliter VARCHAR2)
 2    RETURN stringarrary
 3 IS
 4    j             INT             := 0;
 5    i             INT             := 1;
 6    len           INT             := 0;
 7    len1          INT             := 0;
 8    str           VARCHAR2 (4000);
 9    returnvalue   stringarrary    := stringarrary ();
10 BEGIN
11    IF (spliter IS NULL) OR (SOURCE IS NULL)
12    THEN
13       returnvalue.EXTEND;
14       returnvalue (1) := SOURCE;
15    ELSE
16       len := LENGTH (SOURCE);
17       len1 := LENGTH (spliter);
18 
19       WHILE j < len
20       LOOP
21          j := INSTR (SOURCE, spliter, i);
22 
23          IF j = 0
24          THEN
25             j := len;
26             str := SUBSTR (SOURCE, i);
27             returnvalue.EXTEND;
28             returnvalue (returnvalue.COUNT) := str;
29 
30             IF i >= len
31             THEN
32                EXIT;
33             END IF;
34          ELSE
35             str := SUBSTR (SOURCE, i, j - i);
36             i := j + len1;
37             returnvalue.EXTEND;
38             returnvalue (returnvalue.COUNT) := str;
39          END IF;
40       END LOOP;
41    END IF;
42 
43    RETURN returnvalue;
44 END stringsplit;

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.