Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DECLARE
- OBJTYPE_FSFM_EXCHANGE_ERRORS CONSTANT INTEGER := 4500; -- Коды ошибок обмена с ФСФМ
- FUNCTION IsExist(token IN VARCHAR2)
- RETURN NUMBER
- IS
- v_existFlag NUMBER := 0;
- BEGIN
- SELECT T_ELEMENT INTO v_existFlag FROM dllvalues_dbt WHERE t_List = OBJTYPE_FSFM_EXCHANGE_ERRORS AND t_Code = token;
- RETURN v_existFlag;
- EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0;
- END;
- FUNCTION BildErrorCodeStr(str IN VARCHAR2)
- RETURN VARCHAR2
- IS
- v_ErrorCodeStr VARCHAR2 (4000) := '';
- v_currPos NUMBER := 0;
- v_ErrorCodeTMP VARCHAR2 (10) := '';
- BEGIN
- LOOP
- EXIT WHEN v_currPos > LENGTH(str);
- IF (SUBSTR(str, v_currPos, 1) = 'X') THEN
- BEGIN
- SELECT t_Code INTO v_ErrorCodeTMP FROM dllvalues_dbt WHERE t_List = OBJTYPE_FSFM_EXCHANGE_ERRORS AND T_ELEMENT = v_currPos;
- v_ErrorCodeStr := v_ErrorCodeStr || ';' || v_ErrorCodeTMP;
- EXCEPTION WHEN OTHERS THEN NULL;
- END;
- END IF;
- v_currPos := v_currPos + 1;
- END LOOP;
- -- Удаляем первый символ (;) и возвращаем новую строку
- v_ErrorCodeStr := SUBSTR(v_ErrorCodeStr, 2);
- RETURN v_ErrorCodeStr;
- END;
- FUNCTION RemoveDuplicates(str IN VARCHAR2)
- RETURN VARCHAR2
- IS
- v_str VARCHAR2(4000) := str;
- v_new_str VARCHAR2(4000) := '';
- v_ErrCodeFlag VARCHAR2(10):= 'OOOOOOOOOO';
- v_existFlag NUMBER := 0;
- BEGIN
- WHILE LENGTH(v_str) > 0 LOOP
- IF INSTR(v_str, ';') > 0 THEN
- -- Получаем очередной токен и обрезаем строку
- DECLARE
- v_token VARCHAR2(100) := SUBSTR(v_str, 1, INSTR(v_str, ';')-1);
- BEGIN
- v_str := SUBSTR(v_str, INSTR(v_str, ';')+1);
- v_existFlag := IsExist(v_token);
- IF (v_existFlag != 0) THEN
- v_ErrCodeFlag := SUBSTR(v_ErrCodeFlag, 1, v_existFlag - 1) || 'X' || SUBSTR(v_ErrCodeFlag, v_existFlag + 1);
- END IF;
- END;
- ELSE
- -- Остался последний токен в строке
- DECLARE
- v_token VARCHAR2(100) := v_str;
- BEGIN
- -- Проверяем, есть ли этот токен в новой строке
- v_existFlag := IsExist(v_token);
- IF (v_existFlag != 0) THEN
- v_ErrCodeFlag := SUBSTR(v_ErrCodeFlag, 1, v_existFlag - 1) || 'X' || SUBSTR(v_ErrCodeFlag, v_existFlag + 1);
- END IF;
- v_str := '';
- END;
- END IF;
- END LOOP;
- RETURN BildErrorCodeStr(v_ErrCodeFlag);
- END;
- BEGIN
- DBMS_OUTPUT.put_line(RemoveDuplicates('00001;00004;00003;00003;111;55'));
- END;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement