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

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

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

    posts - 56, comments - 54, trackbacks - 0, articles - 4
       ::  ::  :: 聯系 :: 聚合  :: 管理

    SQL and PL/SQL

    Posted on 2005-12-06 22:29 Terry的Blog 閱讀(666) 評論(0)  編輯  收藏 所屬分類: oracle

    SQL and PL/SQL
     
    Oracle 的內置函數提供了全角和半角字符轉換的功能:
    SELECT TO_SINGLE_BYTE('123abcXYZ') FROM dual -- 123abcXYZ
    SELECT TO_MULTI_BYTE('123abcXYZ') FROM dual -- 123abcXYZ

    一些PL/SQL的小特性:

    DECLARE
        -- Local variables here
        i   INTEGER;
        idx VARCHAR2(2000);
       
        TYPE word_list IS TABLE OF idx%TYPE INDEX BY idx%TYPE;
        the_list word_list;

        wChar VARCHAR2(2000);

        wTmp varchar2(2000);
        num1 NUMBER(12);
       
        chr1 CHAR(5);
       
        FUNCTION tstChar(inputChr IN CHAR) RETURN NUMBER IS
        BEGIN
            dbms_output.put_line('|' || inputChr || '|');
            RETURN 1;
        END;
    BEGIN
        -------------------------------------------------------------
        --               Max Min value
        -------------------------------------------------------------
        num1 := greatest(100,200,300,210,120,99);
        dbms_output.put_line(num1); -- 300
       
        wTmp := greatest('abc','bcd','cde','xxx','zzz','yyy');
        dbms_output.put_line(wTmp); -- zzz
       
        wTmp := least('abc','bcd','cde','xxx','zzz','yyy');
        dbms_output.put_line(wTmp); -- abc
       
        -------------------------------------------------------------
        --               substr
        -------------------------------------------------------------   
        wTmp := 'abcdefg';
        wTmp := substr(wTmp,-3,2);
        dbms_output.put_line(wTmp); -- ef
       
        -------------------------------------------------------------
        --               lpad
        -------------------------------------------------------------   
        wTmp := lpad(wTmp,10,'?');
        dbms_output.put_line(wTmp); -- ????????ef

        wTmp := NULL;
        wTmp := lpad(wTmp,10,'?');
        dbms_output.put_line(wTmp); -- null

        -------------------------------------------------------------
        --               length of char
        -------------------------------------------------------------   
        chr1 := 'aaa';
        num1 := tstChar(chr1);
        
        -------------------------------------------------------------
        --               table indexed by varchar2
        -------------------------------------------------------------   
        dbms_output.put_line('------ test 1 collection index by varchar2------');
        the_list('key1') := 'value1';
        the_list('key2') := 'value2';
        the_list('key3') := 'value3';
        the_list('key0') := NULL;

        idx := the_list.FIRST();

        WHILE idx IS NOT NULL LOOP
            Dbms_Output.Put_line(idx || '   ' || the_list(idx));
            idx := the_list.NEXT(idx);
        END LOOP;

        IF the_list.EXISTS('aaa') THEN
            Dbms_Output.Put_line('aaa');
        ELSE
            Dbms_Output.Put_line('no aaa');
        END IF;

        Dbms_Output.Put_line(the_list.COUNT);
        the_list.delete('key1');
        Dbms_Output.Put_line(the_list.COUNT);

        -------------------------------------------------------------
        --               handle null
        -------------------------------------------------------------   
        dbms_output.put_line('------ test 2  handle null------');
        idx := NULL;
        idx := CASE WHEN idx IS NULL THEN 'is null' WHEN idx IS NOT NULL THEN 'is not null' ELSE 'else' END;
        Dbms_Output.Put_line(idx);

        idx := NULL;
        SELECT decode(idx, NULL, 'is null', 'is not null', 'else')
          INTO idx
          FROM dual;
        Dbms_Output.Put_line(idx);

        idx := NULL;
        idx := REPLACE('old_string_1', NULL, 'replace null');
        Dbms_Output.Put_line(idx);

        idx := REPLACE('old_string_2', '_', NULL);
        Dbms_Output.Put_line(idx);

        idx := 'apple' || NULL || NULL || 'sauce';
        Dbms_Output.Put_line(idx);

        -------------------------------------------------------------
        --               動態sql
        -------------------------------------------------------------   
        wChar := 'select to_char(sysdate,''yyyy/mm/dd'') from dual ';
       
        execute immediate wChar into idx;
        Dbms_Output.Put_line('test execute immediate = ' || idx);
       

        -------------------------------------------------------------
        --               隱式光標
        -------------------------------------------------------------   

    --    for rec in (select *  from mststrc21) loop
    --        Dbms_Output.Put_line('rec = ' || rec.pantpatternno);
    --    end loop;
       
        -------------------------------------------------------------
        --               trim()
        -------------------------------------------------------------   
        --Trim(Leading|Trailing|Both trim_character from trim_source)
        idx := TRIM(' abc ');
        Dbms_Output.Put_line('|' || idx || '|');
       
        idx := TRIM(' abc '); -- full space
        Dbms_Output.Put_line('|' || idx || '|');
       
        idx := TRIM(leading ' ' FROM ' abc '); -- full space
        Dbms_Output.Put_line('|' || idx || '|');
       
        idx := TRIM(leading 'ab' FROM 'abc');
        Dbms_Output.Put_line('|' || idx || '|'); -- ORA-30001: 切捨てセットの文字は1つにする必要があります
       
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            Dbms_Output.Put_line('NO_DATA_FOUND');   
            Dbms_Output.Put_line(SQLCODE);   
            Dbms_Output.Put_line(SQLERRM);
        WHEN TOO_MANY_ROWS THEN
            Dbms_Output.Put_line('TOO_MANY_ROWS');   
            Dbms_Output.Put_line(SQLCODE);   
            Dbms_Output.Put_line(SQLERRM);
        WHEN OTHERS THEN
            Dbms_Output.Put_line('OTHERS');   
            Dbms_Output.Put_line(SQLCODE);   
            Dbms_Output.Put_line(SQLERRM);   
    END;

    主站蜘蛛池模板: 大学生高清一级毛片免费| 亚洲丝袜中文字幕| 亚洲狠狠久久综合一区77777| 亚洲人成网7777777国产| 亚洲AV人无码综合在线观看| 亚洲一级毛片在线播放| 免费人成视频在线播放| 免费无码黄网站在线看| 日本一道本高清免费| 91天堂素人精品系列全集亚洲| 亚洲色中文字幕在线播放| 久久久久久国产a免费观看不卡| 亚洲精品在线免费观看视频| 日本免费福利视频| 亚洲精品美女久久久久9999| 粉色视频免费入口| 一二三四在线观看免费高清中文在线观看 | 国产一级淫片a免费播放口| 国产传媒在线观看视频免费观看| 亚洲第一精品在线视频| 亚美影视免费在线观看| 精品免费国产一区二区三区 | 国产亚洲福利精品一区| 亚洲日韩国产一区二区三区在线| 很黄很污的网站免费| 国产亚洲av片在线观看18女人| 亚洲AV无码一区二区三区电影| 免费成人激情视频| 亚洲日产2021三区| 18女人腿打开无遮掩免费| 久久久久久a亚洲欧洲aⅴ| A级毛片成人网站免费看| 亚洲中文字幕视频国产| 亚洲乱码无码永久不卡在线| 特级做a爰片毛片免费看| 日韩一品在线播放视频一品免费| 亚洲综合色丁香麻豆| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国产成人精品久久亚洲高清不卡 | 美女黄网站人色视频免费| 黑人粗长大战亚洲女2021国产精品成人免费视频 |