powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Текст исключения с параметрами
25 сообщений из 30, страница 1 из 2
Текст исключения с параметрами
    #38753316
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если текстовой параметр передавать в сообщение через переменную, то русский текст, переданный в сообщение, показывается не правильно.

Параметры БД:
FB 3.0.0.31333

Код: plaintext
1.
2.
ODS = 12.0
Default Character set: UTF8 (with Default Collation UNICODE_CI_AI)
Set names: WIN1251

Создано исключение:
Код: sql
1.
CREATE EXCEPTION EX_LESS_ZERO '"@1" не должен быть меньше нуля (было: @2, стало: @3)';


Вызывается из триггера:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR ALTER TRIGGER TR$TEST_BIU FOR TEST
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as
declare variable t varchar(128); -- character set none;
begin
  if (new.quantity < 0) then
  begin
    t = 'Тест';
    -- exception ex_less_zero using ('Тест', old.quantity, new.quantity);
    exception ex_less_zero using (t, old.quantity, new.quantity);
  end
end


Получаю сообщение:
Код: plaintext
1.
-EX_LESS_ZERO
-"Тест" не должен быть меньше нуля (было: 1, стало: -1)

Если вызвать так
Код: plaintext
exception ex_less_zero using ('Тест', old.quantity, new.quantity);

то сообщение такое:
Код: plaintext
1.
-EX_LESS_ZERO
-"Тест" не должен быть меньше нуля (было: 1, стало: -1)

Если изменить присваивание на t = 'ZZZ Тест', получим: "ZZZ Тест"
Это как-нибудь лечится?
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38753322
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди Таккер,

я о похожей ошибке писал в трекере CORE-4160 . Значит не долечили.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38753328
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на то.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38753709
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как они долечат, если тексты исключений до сих пор хранятся с чарсетом NONE?
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38753779
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

я про это писал, но Адриано решил по своему сделать
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38753805
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, он решил сделать "наоборот" - оперировать
ими как None вместо юникода. Ещё где-нибудь аукнется, поди.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38754154
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА как они долечат, если тексты исключений до сих пор хранятся с чарсетом NONE?Тоже был этим несколько удивлен.
Дальнейшие разбирательства уже в ISQL показали следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Use CONNECT or CREATE DATABASE to specify a database
SQL> set names win1251;
SQL> 
SQL> connect localhost:shf user SHF_OWNER password 'SHF_OWNER';
Database:  localhost:shf, User: SHF_OWNER
SQL> set term ^;
SQL> 
SQL> create or alter procedure TEST_EXCEPTION
CON> as
CON> declare variable t varchar(128);
CON> begin
CON>   t = goods_flow.get_goods_name(1009179);
CON>   t = 'Тест процедуры TEST_EXCEPTION: ' || t;
CON>   exception ex_goods_remains_less_zero using (t, 1, 2);
CON> end^
SQL>
SQL> execute procedure TEST_EXCEPTION^
Statement failed, SQLSTATE = HY000
exception 1
-EX_GOODS_REMAINS_LESS_ZERO
-Остаток " Тест процедуры TEST_EXCEPTION: Марка 3 " не должен быть меньше нуля (было: 1, стало: 2)

Тоже, но через execute block:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> execute block
CON> as
CON> declare variable t varchar(128);
CON> begin
CON>   t = goods_flow.get_goods_name(1009179);
CON>   t = 'Тест процедуры TEST_EXCEPTION: ' || t;
CON>   exception ex_goods_remains_less_zero using (t, 1, 2);
CON> end^
Statement failed, SQLSTATE = HY000
exception 1
-EX_GOODS_REMAINS_LESS_ZERO
-Остаток " Тест процедуры TEST_EXCEPTION: Марка 3 " не должен быть меньше нуля (было: 1, стало: 2)
SQL>

Далее делаю тоже самое, но меняю charset переменной t на NONE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> create or alter procedure TEST_EXCEPTION
CON> as
CON> declare variable t varchar(128)  character set none ;
CON> begin
CON>   t = goods_flow.get_goods_name(1009179);
CON>   t = 'Тест процедуры TEST_EXCEPTION: ' || t;
CON>   exception ex_goods_remains_less_zero using (t, 1, 2);
CON> end^
SQL> execute procedure TEST_EXCEPTION^
Statement failed, SQLSTATE = HY000
exception 1
-EX_GOODS_REMAINS_LESS_ZERO
-Остаток " Тест процедуры TEST_EXCEPTION: Марка 3 " не должен быть меньше нуля (было: 1, стало: 2)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> execute block
CON> as
CON> declare variable t varchar(128) character set none;
CON> begin
CON>   t = goods_flow.get_goods_name(1009179);
CON>   t = 'Тест процедуры TEST_EXCEPTION: ' || t;
CON>   exception ex_goods_remains_less_zero using (t, 1, 2);
CON> end^
Statement failed, SQLSTATE = HY000
exception 1
-EX_GOODS_REMAINS_LESS_ZERO
-Остаток " Тест процедуры TEST_EXCEPTION: Марка 3 " не должен быть меньше нуля (было: 1, стало: 2)

Прочитал Кодировка NONE в 2.5 . Но не особо помогло в понимании логики процесса.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38754232
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажись дошло.
Сообщения для исключений сохраняются в character set none, т.е фактически в символах, соответствующих чарсету конекта, который был при их создании (в моем случае - win1251). База в UTF8. Смешение кодировок при выводе сообщения дает продемонстрированный эффект.
Как бороться понятно.
Но как-то это не аккуратно, не находите?

И попутный вопрос, почему все-таки первые два примера из моего предыдущего сообщения выдали разный результат при выполнении одного и того же кода в процедуре в execute block? Повторюсь, что умолчательный чарсет utf8.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38754387
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди Таккер> Как бороться понятно.

Приводить/коннектиться в UTF (или U_FSS)?

> Но как-то это не аккуратно, не находите?

Ну, Адриано, судя по трекеру и коду, считает, что
пофиксил и этого достаточно. Поживём, увидим,
лично мне кажется, что ещё где-то вылезет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38754604
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам>Приводить/коннектиться в UTF (или U_FSS)?

Да, как-то так.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38755279
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как правильно?
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758225
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXCEPTION должен храниться в юникоде, и должен преобразовываться в чарсет коннекта, при выдаче пользователю.
Если чарсет коннекта NONE, то преобразование текста исключения из UNICODE_FSS в удобочитаемый вид целиком ложится на библиотеку доступа, хотя можно и кракозябры выдать.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758232
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeдолжен
Да, да, должен. Только скажи как это обеспечить не поломав нафиг restore бэкапов от
предыдущих версий.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758238
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

-fix_exception_msg win1251? А те, кто уже накрутил бардак с кодировками, нехай разгребают перед миграцией. Или после, если повезет и отресторятся кракозябры.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758242
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr-fix_exception_msg win1251?
Мне вот тоже ничего кроме ещё одного ключа в голову не приходит. Но это так уныло и
тошнотворно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758251
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо это так уныло и тошнотворно...
вот и Адриано так говорит. Или юзеры, кого он спрашивал. Но IMHO если врожденные косяки никогда не исправлять, то это путь в никуда.
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758254
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrвот и Адриано так говорит.
Ах, если бы в файле бэкапа строки имели при себе идентификатор чарсета, можно было бы
возложить исправление на уже имеющиеся ключи или даже сделать его автоматическим...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758256
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrесли врожденные косяки никогда не исправлять, то это путь в никуда.0xFF. Я ждал эту фразу! :-)
Когда будет выправлен врождённый косяк со стеком, при котором вместо update-conflict'a лезет 'deadlock' ? Ну, и вообще по обработке исключений есть еще вопросики...
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758265
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКогда будет выправлен врождённый косяк со стеком, при котором вместо update-conflict'a лезет 'deadlock' ?
у тебя все остальное так хорошо, что больше прикопаться не к чему? :-)
могу исправить хоть завтра, я даже упоминал этот вариант в твоем CORE-4473
но в результате меня могут закопать за похеренные обработчики ошибок
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758277
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В кодировке NONE нашёл ещё несколько строковых полей (2.5.3):
MON$CONTEXT_VARIABLES.MON$VARIABLE_NAME
MON$CONTEXT_VARIABLES.MON$VARIABLE_VALUE
RDB$BACKUP_HISTORY.RDB$FILE_NAME
RDB$FIELDS.RDB$EDIT_STRING
RDB$FILES.RDB$FILE_NAME
RDB$FILTERS.RDB$MODULE_NAME
RDB$FILTERS.RDB$ENTRYPOINT
RDB$FUNCTIONS.RDB$MODULE_NAME
RDB$FUNCTIONS.RDB$ENTRYPOINT
RDB$LOG_FILES.RDB$FILE_NAME
RDB$RELATIONS.RDB$EXTERNAL_FILE
RDB$RELATION_FIELDS.RDB$EDIT_STRING
RDB$TRIGGER_MESSAGES.RDB$MESSAGE
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758286
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrменя могут закопать за похеренные обработчики ошибокНе закопают, если будут читателями RelNotes.
А докопаться я теперь, через полгода после возни с OLTP-EMUL'ом, могу много до чего - списочек ведь у тебя есть... :-)
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758342
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> если врожденные косяки никогда не исправлять, то это путь в никуда.

Так тебе это надо не нам говорить, а Адриано.
"Проявить политическую волю", так сказать.
Тем более, что реально это коснётся очень
небольшого количества пользователей.

Как раз 3.0 на носу - самое время исправить и
это, и пробежаться по остальным аналогичным
местам, если ещё остались.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758473
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТак тебе это надо не нам говорить, а Адриано.
и ему я тоже сказал
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758579
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrГаджимурадов РустамТак тебе это надо не нам говорить, а Адриано.
и ему я тоже сказал
И что он ответил? ;)
...
Рейтинг: 0 / 0
Текст исключения с параметрами
    #38758584
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, "когда-нибудь... потом... может быть..."
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Текст исключения с параметрами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]