積少成多

          垃圾堆

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            29 Posts :: 1 Stories :: 5 Comments :: 0 Trackbacks

          下面的方法提供了比較好的數據庫分割字符串的方法。不要在每次需要這種功能的地方各寫一個,統一的工具類非常重要。更能排除以下低級的錯誤。
          create
           or replace
          PACKAGE pk_genutilitypkg
          AS
             
          /*

             Generic String Parser: provide a delimiter and it returns an
             index-by table of the individual elements of the string that are
             separated by the specified delimiter.

             Author: "GAUTHAM CHANDRASEKARAN" <gautha@hotmail.com>
             
          */
             TYPE t_string 
          IS TABLE OF VARCHAR2(2000)
                
          INDEX BY BINARY_INTEGER;

             m_ctr 
          NUMBER(5);
             m_pos 
          NUMBER(5);

             
          PROCEDURE sp_parsestring (
                p_string 
          IN VARCHAR2,
                delimiter 
          IN VARCHAR2,
                p_t_string OUT t_string);
          END pk_genutilitypkg;
            
          create or replace
          PACKAGE BODY pk_genutilitypkg
          AS

             
          PROCEDURE sp_parsestring (
                p_string 
          IN VARCHAR2,
                delimiter 
          IN VARCHAR2,
                p_t_string OUT t_string)
             
          IS
                m_string 
          VARCHAR2(4000);
             
          BEGIN
                
          /* Raise a Error if the length of the delimiter is not 1 */
                
          IF LENGTH (delimiter) != 1
                
          THEN
                   raise_application_error (
          -20001,
                       
          'Delimiter should be of only one character');
                   
          RETURN;
                
          END IF;
                m_string :
          = p_string;
                m_ctr :
          = 1;
                LOOP
                   m_pos :
          = INSTR (m_string, delimiter);
                   
          IF m_pos > 1
                   
          THEN
                      p_t_string (m_ctr) :
          = LTRIM(RTRIM( SUBSTR (m_string, 1, m_pos - 1) ));
                      
          IF (m_pos < LENGTH (m_string))
                      
          THEN
                         m_string :
          = SUBSTR (
                                        m_string,
                                        m_pos 
          + 1,
                                        LENGTH (m_string) 
          - m_pos
                                     );
                      ELSIF m_pos 
          = LENGTH (m_string)
                      
          THEN
                         m_ctr :
          = m_ctr + 1;
                         p_t_string (m_ctr) :
          = NULL;
                         
          EXIT;
                      
          END IF;
                   ELSIF m_pos 
          = 1
                   
          THEN
                      p_t_string (m_ctr) :
          = NULL;
                      
          IF m_pos < LENGTH (m_string)
                      
          THEN
                         m_string :
          = SUBSTR (
                                        m_string,
                                        m_pos 
          + 1,
                                        LENGTH (m_string) 
          - m_pos
                                     );
                      ELSIF m_pos 
          = LENGTH (m_string)
                      
          THEN
                         m_ctr :
          = m_ctr + 1;
                         p_t_string (m_ctr) :
          = NULL;
                         
          EXIT;
                      
          END IF;
                   ELSIF m_pos 
          = 0
                   
          THEN

                      p_t_string (m_ctr) :
          = LTRIM(RTRIM( m_string ));
                      
          EXIT;
                   
          END IF;
                   m_ctr :
          = m_ctr + 1;
                
          END LOOP;
             
          END;
          END pk_genutilitypkg;

          使用方法如下:
          PROCEDURE UseStringParse(
              user_list   
          IN       VARCHAR2
          )
          IS
              userid_list   
          VARCHAR2 (1000) := user_list;
              userlistarray   pk_genutilitypkg.t_string;
              vuserid       
          VARCHAR2 (100);
          BEGIN

              pk_genutilitypkg.sp_parsestring(userid_list, 
          ',', userlistarray);
              
          FOR userindex IN 1 .. userlistarray.COUNT
                  loop
                  vuserid:
          =userlistarray(userindex);
              
          END LOOP;

          END UseStringParse;


          posted on 2011-06-29 14:43 思無 閱讀(1139) 評論(0)  編輯  收藏 所屬分類: 數據庫

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


          網站導航:
           
          主站蜘蛛池模板: 岱山县| 通江县| 乌鲁木齐县| 平顺县| 丹东市| 大足县| 盖州市| 潜江市| 资中县| 楚雄市| 九龙县| 苍梧县| 双柏县| 谷城县| 绥阳县| 海南省| 汕尾市| 明溪县| 杭锦旗| 奎屯市| 洱源县| 抚州市| 溧阳市| 房产| 长寿区| 台前县| 灌南县| 玉树县| 万年县| 耿马| 凯里市| 无为县| 民丰县| 九台市| 揭阳市| 萨迦县| 岐山县| 朝阳区| 太原市| 来安县| 平邑县|