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

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

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

    程序人生

    記錄編程中的點點滴滴

    解析IN函數(shù)使用的字符串

    操作環(huán)境
    Server   Oracle  11g
    Client    Oracle  10g

    vs_string  輸入?yún)?shù)格式如'info1,info22,info333,info4444',以","做間隔符,每變量長度不確定

    vn_num     vs_string 中合并拼接的變量數(shù)量

    SELECT SUBSTR(vs_string,
                  DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1,
                  DECODE(LEVEL,vn_num,LENGTH(vs_string),INSTR(vs_string,',',1,DECODE(LEVEL,1,1,LEVEL))-1)-
                  (DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1)+1)
                  FROM DUAL
                  CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(vs_string,',',1,'i')+1 FROM DUAL);
                 

    在oracle 中 IN 函數(shù)只能對查詢的結果集或明確的參數(shù)集合進行多行查詢,對于一個參數(shù)無論其表現(xiàn)形式只能進行一個參數(shù)的判斷查詢

    EMPLOYEE_T 表中存在如下數(shù)據(jù)

    EMPLOYEE_ID        EMPLOYEE_NAME
    --------------------------------
    001                 znp
    002                 zsj
    003                 zhsj

    SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('001','002')的查詢結果如下

    EMPLOYEE_ID        EMPLOYEE_NAME
    --------------------------------
    001                 znp
    002                 zsj

    SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('001,002')的查詢結果如下

    EMPLOYEE_ID        EMPLOYEE_NAME
    --------------------------------

    在 SELECT * FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('001,002') 中 "'001,002'" 只能做為一個入?yún)⒍皇莾蓚€入?yún)?參數(shù)值為
    '001,002' ,故查不到合適的記錄

    在存儲過程中對于以上的入?yún)⒖梢圆扇煞N辦法進行

    1、通過拼接動態(tài)SQL進行查詢

    vs_sql := 'SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T WHERE EMPLOYEE_ID IN ('||CHR(39)||'001'||CHR(39)||','||CHR(39)||'002'||CHR(39)||');

    OPEN _cur FOR vs_sql;

    2、將拼接串轉(zhuǎn)為結果集輸出至IN函數(shù)中,使用如下腳本

    vs_string  輸入?yún)?shù)格式如'info1,info22,info333,info4444',以","做間隔符,每變量長度不確定

    vn_num     vs_string 中合并拼接的變量數(shù)量

    SELECT SUBSTR(vs_string,
                  DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1,
                  DECODE(LEVEL,vn_num,LENGTH(vs_string),INSTR(vs_string,',',1,DECODE(LEVEL,1,1,LEVEL))-1)-
                  (DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1)+1)
                  FROM DUAL
                  CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(vs_string,',',1,'i')+1 FROM DUAL);
                 
    照辦上例,即為

    SELECT EMPLOYEE_ID,EMPLOYEE_NAME FROM EMPLOYEE_T
                                     WHERE EMPLOYEE_ID IN
                                     (
                                          SELECT SUBSTR(vs_string,
                                                 DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1,
                                                 DECODE(LEVEL,vn_num,LENGTH(vs_string),INSTR(vs_string,',',1,DECODE(LEVEL,1,1,LEVEL))-1)-
                                                 (DECODE(LEVEL,1,0,(INSTR(vs_string,',',1,LEVEL-1)))+1)+1)
                                                 FROM DUAL
                                                 CONNECT BY LEVEL <= (SELECT REGEXP_COUNT(vs_string,',',1,'i')+1 FROM DUAL)
                                     );

    posted on 2010-12-30 16:12 zhaonp 閱讀(228) 評論(0)  編輯  收藏 所屬分類: Oracle


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 97国产免费全部免费观看| 亚洲免费电影网站| 日韩精品视频免费在线观看| 久久国产精品国产自线拍免费| 亚洲AV香蕉一区区二区三区| 亚洲人成人77777网站不卡| 久久亚洲一区二区| 亚洲中文字幕伊人久久无码| 影音先锋在线免费观看| 久久午夜夜伦鲁鲁片免费无码影视 | 免费一级不卡毛片| 免费视频成人国产精品网站| 亚洲精品第一国产综合亚AV| 久久久久亚洲精品无码系列| 亚洲综合色区在线观看| 日韩亚洲精品福利| 亚洲AV永久无码精品一区二区国产 | 在线免费中文字幕| EEUSS影院WWW在线观看免费| 特级毛片全部免费播放a一级| 亚洲成av人片在www鸭子| 亚洲精品无码mⅴ在线观看| 亚洲最大黄色网址| 亚洲电影在线免费观看| 亚洲一区二区在线免费观看| 亚洲av最新在线网址| 亚洲国产精品无码久久一线| 亚洲尤码不卡AV麻豆| 亚洲第一AV网站| 亚洲五月六月丁香激情| 久久青青草原亚洲av无码app| 久久精品视频亚洲| 精品日韩亚洲AV无码| 亚洲综合激情六月婷婷在线观看 | 99精品国产成人a∨免费看| 日本人成在线视频免费播放| 亚欧免费无码aⅴ在线观看| 99xxoo视频在线永久免费观看| 日本xxxx色视频在线观看免费| 午夜影院免费观看| jjizz全部免费看片|