<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 閱讀(1291) 評論(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
    就碰到了這些問題,記下來備用。

    主站蜘蛛池模板: 亚洲国产成人久久笫一页| 免费h片在线观看网址最新| 免费观看的av毛片的网站| 亚洲国产成+人+综合| h在线观看视频免费网站| 亚洲日本精品一区二区| 日韩免费高清大片在线| 亚洲AV无码乱码在线观看裸奔| 国产免费无码一区二区| 久久亚洲国产精品五月天| 免费精品无码AV片在线观看| 亚洲色图校园春色| 日韩视频在线精品视频免费观看| 亚洲欧美日韩自偷自拍| 国产精品无码免费视频二三区| 美女扒开屁股让男人桶爽免费| 国产精品亚洲玖玖玖在线观看 | 久久成人a毛片免费观看网站| 亚洲精品二区国产综合野狼| a成人毛片免费观看| 色播亚洲视频在线观看| 无码专区永久免费AV网站| 亚洲αⅴ无码乱码在线观看性色| 免费一看一级毛片人| 成在人线av无码免费高潮水| 亚洲A∨无码无在线观看| 免费无码黄十八禁网站在线观看| 亚洲AV色无码乱码在线观看| 亚洲人成无码网站久久99热国产| 色欲A∨无码蜜臀AV免费播| 中文日韩亚洲欧美制服| 免费人成在线观看网站视频| 精品视频在线免费观看| 日韩亚洲国产高清免费视频| 亚洲裸男gv网站| 国产精品成人观看视频免费| 国产亚洲漂亮白嫩美女在线| 亚洲春色在线视频| 成人免费午夜视频| 99在线免费观看| 亚洲中文字幕无码亚洲成A人片|