firebird icon indicating copy to clipboard operation
firebird copied to clipboard

RDB$ERROR and "Cannot transliterate character between character sets"

Open CyberMaxRu opened this issue 3 years ago • 0 comments

FB 4.3.2.2770. Character set - WIN1251.

  1. Create exception: CREATE EXCEPTION EXC$CHECK_DATA 'Check data';

  2. Create procedure: CREATE OR ALTER PROCEDURE TEST_DO_EXCEPTION AS BEGIN EXCEPTION EXC$CHECK_DATA 'Исключение'; END

  3. Throw exception: EXECUTE BLOCK AS DECLARE VARIABLE TXT VARCHAR(1024); BEGIN EXECUTE PROCEDURE TEST_DO_EXCEPTION;-- There no error transliterate -- EXECUTE STATEMENT 'EXECUTE PROCEDURE TEST_DO_EXCEPTION';-- There error transliterate

    WHEN ANY DO BEGIN :TXT = RDB$ERROR(MESSAGE); EXCEPTION EXC$CHECK_DATA :TXT; END END

Result: EXC$CHECK_DATA. exception 2 EXC$CHECK_DATA Исключение At procedure TEST_DO_EXCEPTION line: 4, col: 5 At block line: 6, col: 5. At block line: 11, col: 9.

  1. Throw exception inside EXECUTE STATEMENT: EXECUTE BLOCK AS DECLARE VARIABLE TXT VARCHAR(1024); BEGIN -- EXECUTE PROCEDURE TEST_DO_EXCEPTION;-- There no error transliterate EXECUTE STATEMENT 'EXECUTE PROCEDURE TEST_DO_EXCEPTION';-- There error transliterate

    WHEN ANY DO BEGIN :TXT = RDB$ERROR(MESSAGE); EXCEPTION EXC$CHECK_DATA :TXT; END END

Result: Arithmetic overflow or division by zero has occurred. arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets. At block line: 10, col: 9.

This error is only if there are non-latin letters.

CyberMaxRu avatar Sep 19 '22 06:09 CyberMaxRu