powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразования типа данных.
16 сообщений из 16, страница 1 из 1
Преобразования типа данных.
    #38783667
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Странная ошибка.
Есть таблица А:
Код: plsql
1.
2.
3.
 CREATE TABLE SUPPLY (
    PERIOD        DATE,
    ...);


На нем пытаюсь записать данные из таблицы Б.
Таблица Б:
Код: plsql
1.
2.
3.
CREATE TABLE SUPPLY_OPER (
    DATETIME  TIMESTAMP,
    ...);


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR ALTER trigger supply_oper_aiu0 for supply_oper
active after insert or update position 0
AS
/* Здесь переменные */
begin
  if (updating) then
  begin
    if ((old.datetime <> new.datetime) or (:sp113_new <> :sp113_old) or
             (old.sp122 <> new.sp122)) then
         begin

           wherestr = 'where ((period=?) and (sp113=?) and (sp122=?) and (cost=?))';

           query = 'update supply set '||:supplyfield||'=? '||:wherestr;          

           execute statement (:query) (-old.quantity, cast(old.datetime as date) /* здесь возникает проблема */, 
                                                                     :sp113_old, old.sp122, old.cost);
  end
end



И в результате ошибка:
Error Message:
----------------------------------------
Overflow occurred during data type conversion.
conversion error from string "2014-09-01".
At trigger 'SUPPLY_OPER_AIU0' line: 270, col: 1
At trigger 'JOURNAL_AIU0' line: 35, col: 1.
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783680
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

а что в триггере JOURNAL_AIU0
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783683
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выражение
Код: sql
1.
cast(old.datetime as date)


должно дать результат : 01.09.2014.
Но почему-то в сообщении ошибки преобразованная дата показана как 2014-09-01.
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783686
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAlimkulov,

а что в триггере JOURNAL_AIU0

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR ALTER trigger journal_aiu0 for journal
active after update or delete position 0
AS
begin
  if (updating) then
  begin

    if ((old.isposting = 1) and (new.isposting = 1)
       and (new.ismark = 0) and
       (old.datereg <> new.datereg)) then

       update supply_oper
       set datetime = cast(cast(new.datereg as date)||' '||cast(new.timereg as time) as timestamp)
       where iddoc = new.iddoc;
   end   
end
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783705
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

вот здесь ошибка может быть

Код: sql
1.
cast(cast(new.datereg as date)||' '||cast(new.timereg as time) as timestamp)



если они соответствующих типов, то достаточно просто

new.datereg + new.timereg
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783724
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAlimkulov,

вот здесь ошибка может быть

Код: sql
1.
cast(cast(new.datereg as date)||' '||cast(new.timereg as time) as timestamp)



если они соответствующих типов, то достаточно просто

new.datereg + new.timereg

Вот написал в триггере JOURNAL_AIU0 как Вы сказали:
Код: sql
1.
2.
3.
4.
5.
6.
...
       update supply_oper
       --set datetime = cast(cast(new.datereg as date)||' '||cast(new.timereg as time) as timestamp)
       set datetime = new.datereg + new.timereg
       where iddoc = new.iddoc;
...


Все равно такая же ошибка!
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783767
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovAt trigger 'JOURNAL_AIU0' line: 35, col: 1.
Что-то не вяжется номер строки с текстом триггера...
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783783
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

попробуй выполнить это в триггере без execute statement. Будет ли повторяться ошибка.

Точную версию сервера озвучь.
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783808
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAlimkulov,

попробуй выполнить это в триггере без execute statement. Будет ли повторяться ошибка.

Точную версию сервера озвучь.

без execute statement работает!
Версия сервера 2.5;

Я использовал execute statement для того, чтобы уменьшит строк кода в триггере.
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783830
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

точную версию. В 2.5.3 били исправления по поводу параметризованных ES
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783837
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,
Точная версия: Firebird 2.5.2 (Windows Build)
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783853
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alimkulov,

обновись и проверь на 2.5.3
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783883
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAlimkulov,

обновись и проверь на 2.5.3
Спасибо Вам большое! поставил Firebird 2.5.3 (Windows Build) и заработала!
Код: sql
1.
2.
3.
  wherestr = 'where ((period=?) and (sp113=?) and (sp122=?) and (cost=?))';
  query = 'update supply set '||:supplyfield||'=? '||:wherestr;          
  execute statement (:query) (-old.quantity, cast(old.datetime as date), :sp113_old, old.sp122, old.cost);


Как параметр мы можем давать любые типы данных!
Firebird лучше!
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783912
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovКак параметр мы можем давать любые типы данных!
Убивать надо за такой дизайн БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783942
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlimkulovКак параметр мы можем давать любые типы данных!
Убивать надо за такой дизайн БД.

Что Вы имеете в виду?
...
Рейтинг: 0 / 0
Преобразования типа данных.
    #38783961
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlimkulovЧто Вы имеете в виду?
update заранее неизвестного поля - ошибка проектирования сама по себе. Подозреваю, что это
хранимый агрегат, а их применение без основания - вторая ошибка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразования типа данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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