Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
 Отладка ХП и условие в SELECT  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1089
При отладке ХП заметил, что IBE не заходит в цикл FOR SELECT, хотя при обычном выполнении он отрабатывает. Анализ показал, что это из-за условия (AMP.COST_CUBIC_METRE = :COST_CUBIC_METRE). Поле COST_CUBIC_METRE и параметр имеют тип NUMERIC(9,5). C NUMERIC(18, 2) подобной проблемы не замечалось.
4 сен 17, 11:42    [20769278]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2112
Тестовый пример мне самому сочинять? Я не буду, я лентяй.
4 сен 17, 20:33    [20771004]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1089
IBExpert,

При тесте выяснилось, что даже в случае 9.2 сравнение не срабатывает.

CREATE TABLE TESTTABLE (
    ID    INTEGER NOT NULL,
    VAL   NUMERIC(9,5) NOT NULL,
    VAL2  NUMERIC(9,2) NOT NULL,
    VAL3  NUMERIC(9,0) NOT NULL
);

COMMIT;

INSERT INTO TESTTABLE (ID, VAL, VAL2, VAL3)
               VALUES (1, 5, 5, 5);
INSERT INTO TESTTABLE (ID, VAL, VAL2, VAL3)
               VALUES (2, 5.5, 5.5, 6);
INSERT INTO TESTTABLE (ID, VAL, VAL2, VAL3)
               VALUES (3, 5.12345, 5.12, 5);
COMMIT;


EXECUTE BLOCK
AS
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE VAL NUMERIC(9,5);
BEGIN
--    VAL = 5.0;-- Входит в цикл
    VAL = 5.5;-- Не входит в цикл

    FOR SELECT
        T.ID
    FROM
        TESTTABLE T
    WHERE
        T.VAL2 = :VAL
    INTO
        :ID
    DO
    BEGIN
        ID = :ID;
    END
END
5 сен 17, 08:20    [20771467]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2112
Исправил.
6 сен 17, 10:50    [20774713]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1089
В версии 2017.9.6.1 у всех параметров и переменных ХП отображается DECFLOAT вместо реального домена:
CREATE OR ALTER PROCEDURE OPER$RECEIPT$RETURN (
    ID_RETURNED_RECEPT DECFLOAT(34) NOT NULL,
    ID_SOURCE DECFLOAT(34) NOT NULL,
    DATE_ACCOUNT DECFLOAT(34) NOT NULL,
    PAYMENT_ORDER DECFLOAT(34),
    COMMENT DECFLOAT(34))
AS
DECLARE VARIABLE ID_BATCH DECFLOAT(34);
DECLARE VARIABLE ID_RECEIPT DECFLOAT(34);
BEGIN
8 сен 17, 07:02    [20780407]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2112
CyberMax
В версии 2017.9.6.1 у всех параметров и переменных ХП отображается DECFLOAT вместо реального домена:


Это где именно? Какая версия сервера?
DECFLOAT - это из FB 4.
8 сен 17, 17:31    [20782672]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1089
IBExpert,

В ленивом режиме редактирования хп, например. Fb 2.5 как реальный, так и в настройках ibe.
9 сен 17, 14:13    [20783816]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2112
У меня не воспроизводится.
Как на самом деле выглядит заголовок процедуры? В базе есть домен с именем DECFLOAT?
9 сен 17, 15:00    [20783847]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1089
IBExpert,

Заголовок ХП в версии 2017.8.22.1 выглядит вот так:
CREATE OR ALTER PROCEDURE OPER$RECEIPT$RETURN (
    ID_RETURNED_RECEPT DOM$KEY NOT NULL,
    ID_SOURCE DOM$KEY NOT NULL,
    DATE_ACCOUNT DOM$DATE NOT NULL,
    PAYMENT_ORDER DOM$NUMBER_PAYMENT_ORDER,
    COMMENT DOM$COMMENT)
AS
DECLARE VARIABLE ID_BATCH DOM$KEY;
DECLARE VARIABLE ID_RECEIPT DOM$KEY;
BEGIN

Доменов с текстом %FLOAT% нет.
9 сен 17, 15:36    [20783883]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
IBExpert,

а что IBE уже научился понимать DECFLOAT?
9 сен 17, 16:03    [20783896]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2112
Исправил.
9 сен 17, 16:19    [20783899]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 2112
Симонов Денис
а что IBE уже научился понимать DECFLOAT?


Частично. Т.е., парсер уже понимает, в списке типов DECFLOAT есть, извлечение метаданных знает про него.
Но данные без SET DECFLOAT вывести пока не получится.

SQL SECURITY для таблиц/процедур и т.д. тоже уже поддерживается частично.
9 сен 17, 16:23    [20783901]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
IBExpert,

ключевые и зарезервированные слова для 4.0 которые не подсвечиваются

-- timout
SESSION
IDLE
TIMEOUT
-- error handlers
RDB$ERROR
-- security
RDB$SYSTEM_PRIVILEGE
RDB$ROLE_IN_USE
PRIVILEGE
-- decfloat
COMPARE_DECFLOAT
NORMALIZE_DECFLOAT
QUANTIZE
-- window functions
PRECEDING
UNBOUNDED
FOLLOWING
RANGE
WINDOW
PERCENT_RANK
CUME_DIST
NTILE
-- identity
OVERRIDING
SYSTEM
10 сен 17, 16:44    [20784910]     Ответить | Цитировать Сообщить модератору
 Re: Отладка ХП и условие в SELECT  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 7412
IBExpert,

теперь ещё и NUMERIC(34, x) и DECIMAL(34, x) на основе DECFLOAT(34)
4 окт 17, 22:20    [20843825]     Ответить | Цитировать Сообщить модератору
Все форумы / IBExpert Ответить