<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Let's go inside

    this blog is deprecated as a result of laziness.
    posts - 59, comments - 2, trackbacks - 0, articles - 0

    實戰Oracle--自定義function

    Posted on 2006-08-01 08:01 Earth 閱讀(1285) 評論(0)  編輯  收藏 所屬分類: Java

    因為oracle9i不支持正則表達式,REPLACE函數不夠強大,只好自己寫了一個函數。

    需求:
    把給定的字符串中的數字部分去掉,如果101 North Steet替換成 North Street

    使用方法:
    select REPLACE_NUM('101 North Steet') from dual

    開發工具: Toad(有Debug功能,寫function, procedure非常方便)

    方法。

    1。先找到Toad中Schema Browser的Procs標簽欄。
    2。Create New Object. Object Type: function. New Object Name: REPLACE_NUM. OK!
    3。代碼如下:

    /* Formatted on 2006/05/15 13:57 (Formatter Plus v4.8.5) */
    CREATE OR REPLACE FUNCTION replace_num (street_name IN VARCHAR2)
    ?? RETURN VARCHAR2
    IS
    ?? RESULT?????? VARCHAR2 (1000);
    ?? num????????? NUMBER (3)????? := 0;
    ?? beginindex?? NUMBER (3)????? := 1;
    ?? endindex???? NUMBER (3)????? := 1;
    ?? j??????????? NUMBER (3)????? := 1;
    ?? letter?????? CHAR (1);
    ?? temp???????? CHAR (1);
    BEGIN
    ?? num := LENGTH (street_name);

    ?? IF num IS NULL OR num = 0
    ?? THEN
    ????? RETURN street_name;
    ?? END IF;

    ?? endindex := num;

    ?? -- find the first digit
    ?? FOR i IN 1 .. num
    ?? LOOP
    ????? temp := SUBSTR (street_name, i, 1);

    ????? IF (ASCII (temp) >= 48 AND ASCII (temp) <= 57)
    ????? THEN
    ???????? beginindex := i;
    ???????? EXIT;
    ????? END IF;
    ?? END LOOP;

    ?? -- find last digit
    ?? j := num;

    ?? WHILE j >= 1
    ?? LOOP
    ????? temp := SUBSTR (street_name, j, 1);

    ????? IF (ASCII (temp) >= 48 AND ASCII (temp) <= 57)
    ????? THEN
    ???????? endindex := j;
    ???????? EXIT;
    ????? END IF;

    ????? j := j - 1;
    ?? END LOOP;

    ?? -- find digit block
    ?? RESULT := SUBSTR (street_name, beginindex, endindex - beginindex + 1);
    ?? -- return string without number
    ?? RESULT := REPLACE (street_name, RESULT);
    ?? RETURN RESULT;
    END replace_num;
    第一次寫函數,碰到了下面一些問題:
    聲明變量的時候用DECLARE會報錯,后來改成IS就好了
    賦值符號是:=,不是=, 條件與是and不是&&
    if語句塊不能用花括號,用if 條件 then 語句塊 end if;
    for語句FOR i IN 1 .. num, 
    其中1..num不能寫成num..1,我以為這樣可以使i遞減,原來不可以
    后來改成while語句,并用j := j - 1;進行遞減
    跳出循環是exit不是break, LENGTH(null)返回null而不是0
    就碰到了這些問題,記下來備用。

    主站蜘蛛池模板: 国产91免费在线观看| 麻豆亚洲AV永久无码精品久久| 亚洲成人福利在线观看| 亚洲精品免费在线观看| 30岁的女人韩剧免费观看| 亚洲AV成人片色在线观看| 99爱视频99爱在线观看免费| 亚洲黄色在线电影| 国产高清免费视频| 亚洲国产精品99久久久久久| 精品免费国产一区二区三区 | 亚洲情a成黄在线观看动漫尤物| 成人性生交大片免费看中文| 亚洲AV无码乱码国产麻豆| 三年片在线观看免费大全电影| 久久久亚洲裙底偷窥综合| 免费三级毛片电影片| 自拍偷自拍亚洲精品情侣| 国产人成网在线播放VA免费| 真人做A免费观看| 亚洲精品无码久久久久A片苍井空| a毛片久久免费观看| 亚洲视频在线视频| 日韩吃奶摸下AA片免费观看| 日本亚洲高清乱码中文在线观看| 亚洲午夜爱爱香蕉片| 男女午夜24式免费视频| 亚洲国产最大av| 亚洲欧洲中文日韩久久AV乱码| 亚洲狠狠ady亚洲精品大秀| 成人黄18免费视频| 曰韩无码AV片免费播放不卡| 久久亚洲国产伦理| 女人18毛片免费观看| 三上悠亚在线观看免费| 亚洲三级视频在线观看| 亚洲性日韩精品一区二区三区| 国产精品免费看久久久| 亚洲AV永久无码精品网站在线观看| 国产亚洲?V无码?V男人的天堂| 日韩免费精品视频|