powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с выполнением replace
15 сообщений из 15, страница 1 из 1
Проблема с выполнением replace
    #39375136
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Потребовалось сделать изменение в справочнике контактов, заменить один e-mail на другой.
Написал вот такой блок:

execute block
as
declare variable T_CLIENT integer;
declare variable T_EMAIL_DATA integer;
declare variable T_EMAIL varchar(255);
begin
for select CLIENT, EMAIL_DATA, replace(EMAIL, 'edi@domen.ru', 'edi@domen.com')
from CLIENT_EMAIL_DATA
into :T_CLIENT, T_EMAIL_DATA, T_EMAIL
do
begin
update CLIENT_EMAIL_DATA
set EMAIL = :T_EMAIL
where CLIENT = :T_CLIENT and EMAIL_DATA = :T_EMAIL_DATA ;

end
end


условие CLIENT = :T_CLIENT and EMAIL_DATA = :T_EMAIL_DATA из-за PK, он составной.
При выполнении получаю :
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.

Что может быть?
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375139
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

а что одним UPDATE не судьба?

Код: sql
1.
2.
update CLIENT_EMAIL_DATA
set EMAIL = replace(EMAIL, 'edi@domen.ru', 'edi@domen.com');
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375167
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, одним это как? Не понял, что ты мне предлагаешь.
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375168
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

я же выше написал. На фига сначала SELECT потом UPDATE?
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375181
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы ещё просил - нафига там REPLACE и почему пустой WHERE.
Если на первый вопрос ответ будет - "там несколько адресов в строке", то он же будет и ответом на вопрос собственно темы.
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375190
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, несколько адресов в строке, но с другими доменами. Т.е. 'edi@domen.ru' может быть один, может их быть ещё дополнительные. Where нет, т.к. нужно перебрать все строки в таблице.
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375192
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

да ну? А вот так

Код: sql
1.
2.
3.
update CLIENT_EMAIL_DATA
set EMAIL = replace(EMAIL, 'edi@domen.ru', 'edi@domen.com')
WHERE EMAIL CONTAINING 'edi@domen.ru';
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375201
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисGallemar,

да ну? А вот так

Код: sql
1.
2.
3.
update CLIENT_EMAIL_DATA
set EMAIL = replace(EMAIL, 'edi@domen.ru', 'edi@domen.com')
WHERE EMAIL CONTAINING 'edi@domen.ru';


И вот так ошибка
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375210
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

А как тип у поля
Код: plaintext
CLIENT_EMAIL_DATA.EMAIL
и какой тип возвращает
Код: plaintext
replace()
?

Может просто пытаешься впихнуть невпихуемое?
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375214
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks, точно!!!!
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375217
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

EMAIL какого типа. Может у тебя размерности не хватает? Или по дурости там CHAR в типе поля, тогда TRIM добавь.
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375220
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select client, char_length (email)
from CLIENT_EMAIL_DATA WHERE EMAIL CONTAINING 'edi@domen.ru' - три по 255 символов, строка по 255 символов
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375224
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

ну тогда увеличивай размер
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375228
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисGallemar,
EMAIL какого типа. Может у тебя размерности не хватает? Или по дурости там CHAR в типе поля, тогда TRIM добавь.

EMAIL T_STR_VALUE /* T_STR_VALUE = VARCHAR(255) */,
...
Рейтинг: 0 / 0
Проблема с выполнением replace
    #39375231
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисGallemar,

ну тогда увеличивай размер
Нельзя, не я разработчик и исходного кода нет.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с выполнением replace
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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