Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с выполнением replace / 15 сообщений из 15, страница 1 из 1
26.12.2016, 11:32
    #39375136
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
Добрый день
Потребовалось сделать изменение в справочнике контактов, заменить один 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
26.12.2016, 11:37
    #39375139
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
Gallemar,

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

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

я же выше написал. На фига сначала SELECT потом UPDATE?
...
Рейтинг: 0 / 0
26.12.2016, 12:23
    #39375181
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
Я бы ещё просил - нафига там REPLACE и почему пустой WHERE.
Если на первый вопрос ответ будет - "там несколько адресов в строке", то он же будет и ответом на вопрос собственно темы.
...
Рейтинг: 0 / 0
26.12.2016, 12:32
    #39375190
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
hvlad, несколько адресов в строке, но с другими доменами. Т.е. 'edi@domen.ru' может быть один, может их быть ещё дополнительные. Where нет, т.к. нужно перебрать все строки в таблице.
...
Рейтинг: 0 / 0
26.12.2016, 12:33
    #39375192
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
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
26.12.2016, 12:40
    #39375201
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
Симонов Денис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
26.12.2016, 12:47
    #39375210
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с выполнением replace
Gallemar,

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

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

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

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

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

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


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