積少成多

          垃圾堆

            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)  編輯  收藏 所屬分類: 數據庫

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


          網站導航:
           
          主站蜘蛛池模板: 伊宁县| 桦川县| 桃江县| 通化县| 通州市| 松原市| 河源市| 平利县| 东乡| 从江县| 昭苏县| 宕昌县| 玛纳斯县| 建平县| 柘荣县| 溧水县| 卢氏县| 灵宝市| 乐安县| 砀山县| 塔河县| 二手房| 镇沅| 德格县| 尚志市| 大兴区| 湖北省| 安庆市| 新源县| 扬州市| 中宁县| 响水县| 东兴市| 突泉县| 遂溪县| 马公市| 专栏| 北宁市| 讷河市| 东平县| 炉霍县|