程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> Sybase(sqlanywhere)比較應用版本大小數據庫函數

Sybase(sqlanywhere)比較應用版本大小數據庫函數

編輯:SyBase教程


Sybase(sqlanywhere)比較應用版本大小數據庫函數   前置條件:版本以"."進行分割。  www.2cto.com     [sql] ALTER FUNCTION "SMM"."fn_justsy_zh_compare_app_version"(        IN  p_original      VARCHAR(50)       ,IN  p_compare       VARCHAR(50)    )   RETURNS INTEGER   DETERMINISTIC       -- 比較應用版本、       -- p_original > p_compare return -1       -- p_original = p_compare return 0       -- p_original > p_compare return 1   BEGIN       DECLARE lv_comp         INTEGER;       DECLARE lv_ori_index    INTEGER;       DECLARE lv_com_index    INTEGER;       DECLARE lv_sort_key     INTEGER;       DECLARE lv_sort_index   INTEGER;      --    DECLARE lv_last_ori     VARCHAR(20);   --    DECLARE lv_last_com     VARCHAR(20);   --    DECLARE lv_temp_ori VARCHAR(20) ;   --    DECLARE lv_temp_com VARCHAR(20) ;   --    DECLARE lv_temp_sort INTEGER;          DECLARE LOCAL TEMPORARY TABLE SplitTable ( SortKey INTEGER DEFAULT AUTOINCREMENT, OriVal VARCHAR(20), ComVal VARCHAR(20), PRIMARY KEY(SortKey));       --------  Init Value-------       SET lv_comp = -1 ;           SET p_original = TRIM(p_original) ;           SET p_compare =  TRIM(p_compare) ;       SET lv_sort_key = 1 ;           --------  Init Value-------          -- 拆分出p_original變量中字符串       SET lv_ori_index = CHARINDEX('.', p_original) ;       WHILE lv_ori_index >= 1 LOOP           INSERT INTO SplitTable( OriVal) VALUES (LEFT(p_original,lv_ori_index -1)) ;           SET p_original = SUBSTR(p_original,lv_ori_index + 1,LENGTH(p_original)-lv_ori_index) ;           SET lv_ori_index = CHARINDEX('.', p_original) ;       END LOOP ;           INSERT INTO SplitTable(OriVal) VALUES (p_original) ;          -- 拆分p_compare變量中字符串       SET lv_com_index = CHARINDEX('.', p_compare) ;        WHILE lv_com_index >= 1 LOOP           INSERT INTO SplitTable(SortKey, ComVal) ON EXISTING UPDATE VALUES(lv_sort_key,LEFT(p_compare,lv_com_index -1)) ;           SET p_compare = SUBSTR(p_compare,lv_com_index + 1,LENGTH(p_compare)-lv_com_index) ;           SET lv_com_index = CHARINDEX('.', p_compare) ;           SET lv_sort_key = 1 + lv_sort_key ;       END LOOP ;           INSERT INTO SplitTable(SortKey, ComVal) ON EXISTING UPDATE VALUES(lv_sort_key, p_compare) ;          --    FOR compare_temp AS compare_temp_cursor NO SCROLL CURSOR FOR   --         SELECT OriVal, ComVal, SortKey FROM SplitTable ORDER BY SortKey FOR READ ONLY   --    DO   --        INSERT INTO dba.ml_temp(PFName,PFXMLValue) VALUES('fn_justsy_zh_compare_app_version',OriVal+'---'+ComVal+'--'+STRING(SortKey)) ;   --    END FOR ;          -- 比較       compare_loop_for:       FOR compare_loop AS compare_loop_cursor NO SCROLL CURSOR FOR           SELECT OriVal, ComVal, SortKey FROM SplitTable ORDER BY SortKey FOR READ ONLY       DO           IF(OriVal IS NOT NULL AND ComVal IS NOT NULL) THEN               IF(OriVal > ComVal) THEN                   SET lv_comp = 1 ;                   LEAVE compare_loop_for ;                ELSEIF(OriVal < ComVal) THEN                   SET lv_comp = -1 ;                   LEAVE compare_loop_for ;                ENDIF ;  
              -- 版本相同的情況               IF(lv_sort_index = SortKey AND OriVal = ComVal) THEN                   SET lv_comp = 0 ;               ENDIF ;                      ELSEIF(OriVal IS NULL ) THEN               SET lv_comp = -1 ;               LEAVE compare_loop_for ;            ELSEIF(ComVal IS NULL) THEN                SET lv_comp = 1 ;               LEAVE compare_loop_for ;            END IF ;           SET lv_sort_index = lv_sort_index + 1 ;       END FOR ;              RETURN lv_comp;   END   調用:   [sql]  select fn_justsy_zh_compare_app_version('c.26.89.1','b.25.89.1') ;  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved