Advertisement
niks32

Untitled

Apr 4th, 2023
1,089
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.42 KB | None | 0 0
  1.  
  2. DECLARE
  3.     OBJTYPE_FSFM_EXCHANGE_ERRORS CONSTANT INTEGER := 4500; -- Коды ошибок обмена с ФСФМ
  4.    
  5. FUNCTION IsExist(token IN VARCHAR2)
  6. RETURN NUMBER
  7. IS
  8.     v_existFlag NUMBER := 0;
  9. BEGIN
  10.     SELECT T_ELEMENT INTO v_existFlag FROM dllvalues_dbt WHERE t_List = OBJTYPE_FSFM_EXCHANGE_ERRORS AND t_Code = token;
  11.     EXCEPTION
  12.     WHEN NO_DATA_FOUND THEN RETURN 0;
  13.     RETURN v_existFlag;
  14. END;
  15.    
  16.  
  17. FUNCTION BildErrorCodeStr(str IN VARCHAR2)
  18. RETURN VARCHAR2
  19. IS
  20.     v_ErrorCodeStr VARCHAR2 (4000) := '';
  21. BEGIN
  22.     DECLARE
  23.     v_currPos NUMBER := 0;
  24.     v_ErrorCodeTMP VARCHAR2 (10) := '';
  25.     LOOP
  26.       EXIT WHEN v_currPos > LENGTH(str);
  27.       IF (str[v_currPos] == 'X')
  28.         SELECT t_Code INTO v_ErrorCodeTMP FROM dllvalues_dbt WHERE t_List = OBJTYPE_FSFM_EXCHANGE_ERRORS AND T_ELEMENT = v_currPos;
  29.        
  30.         --Если последний эллемент, то разделительь (;) не ставим
  31.         IF (v_currPos == LENGTH(str))
  32.             v_ErrorCodeStr := v_ErrorCodeStr || v_ErrorCodeTMP;
  33.         END IF;
  34.          
  35.         v_ErrorCodeStr := v_ErrorCodeStr || ';' || v_ErrorCodeTMP;
  36.       END IF;
  37.      
  38.       v_currPos := v_currPos + 1;
  39.    END LOOP;
  40.    
  41.    RETURN v_ErrorCodeStr;
  42. END;
  43.    
  44. FUNCTION RemoveDuplicates(str IN VARCHAR2)
  45. RETURN VARCHAR2
  46. IS
  47.   v_str VARCHAR2(4000) := str;
  48.   v_new_str VARCHAR2(4000) := '';
  49.   v_resultErrorCode VARCHAR2(10):= '';
  50. BEGIN
  51.   WHILE LENGTH(v_str) > 0 LOOP
  52.     IF INSTR(v_str, ';') > 0 THEN
  53.       -- Получаем очередной токен и обрезаем строку
  54.       DECLARE
  55.         v_token VARCHAR2(100) := SUBSTR(v_str, 1, INSTR(v_str, ';')-1);
  56.         v_existFlag NUMBER := 0;
  57.       BEGIN
  58.         v_existFlag := IsExist(v_token)
  59.         IF (v_existFlag)
  60.             v_resultErrorCode[v_existFlag] := 'X';
  61.         END IF;
  62.       END;
  63.     ELSE
  64.       -- Остался последний токен в строке
  65.       DECLARE
  66.         v_token VARCHAR2(100) := v_str;
  67.       BEGIN
  68.         -- Проверяем, есть ли этот токен в новой строке
  69.         v_existFlag := IsExist(v_token)
  70.         IF (v_existFlag)
  71.             v_resultErrorCode[v_existFlag] := 'X';
  72.         END IF;
  73.       END;
  74.     END IF;
  75.   END LOOP;
  76.  
  77.   RETURN BildErrorCodeStr(v_resultErrorCode);
  78. END;
  79.  
  80.  
  81.  
  82. BEGIN
  83.     DBMS_OUTPUT.put_line(remove_duplicates('33;22;22;111;111;55'));
  84. END;
  85. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement