Готовим базу к переводу в 3й диалект: гоняем скрипт через 2й диалект.
Возник вопрос по warning на арифметику.
Ниже приведен сильно упрощенный скрипт, и то что получается в логе.
Вопрос: какая из операций ему не нравится, и как ее переписать так, чтоб
не было ругани? Вроде бы везде использованы INTEGER.
PS. Собственно проблема в том, что ISQL даже не указывает процедуру,
которая ему не нравится, поэтому хочется добиться полного отсутствия
предупреждений в скрипте, иначе есть вероятность что-то пропустить.
//*** test_dialect3.ddl ********************************************
set sql dialect 2;
SET NAMES WIN1251;
CREATE DATABASE 'LOCALHOST:C:\works\test_dialect3.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET WIN1251;
SET TERM ^ ;
create PROCEDURE MODULUS (
DIVIDEND INTEGER,
DIVISOR INTEGER)
RETURNS (
RESULT INTEGER)
AS
BEGIN
IF(Dividend = 0) THEN Result = 0;
ELSE
Result = Dividend-(CAST((cast(Dividend as double precision) /
Divisor) - 5e-1 AS INTEGER) * Divisor);
SUSPEND;
END
^
SET TERM ; ^
//*** выполняем команду ***************************************
isql -i test_dialect3.ddl -o 2.ddl -m
//*** 2.ddl ***************************************************
WARNING: This database speaks SQL dialect 3 but Client SQL dialect was
set to 2 .
Use of multiply expression that returns different results in dialect 1
and dialect 3
-Use of subtract expression that returns different results in dialect 1
and dialect 3