DB2: Создать функцию - Масштаб - PullRequest
0 голосов
/ 16 января 2020

У меня есть таблица popo:

Нет | Id | Значения.

1 | X | 321225.4775 -> Масштаб: 4.

2 | Y | 321235.2115 - > Масштаб: 4.

3 | Z | 12123.12321 -> Масштаб: 5.

4 | A | -> NULL.

5 | B | 12321 -> Scale: 0.

Я хочу Flaging, когда столбец «Значения» содержит данные, где scale> 4. ниже мой текущий скрипт функции .

CREATE OR REPLACE
FUNCTION "SCHEME"."VALIDATION01" (A VARCHAR(500)) RETURNS INT
LANGUAGE SQL
BEGIN
DECLARE ASD DEC;
DECLARE A DEC;
SET ASD = CAST(A AS DEC(20,4));
IF A = ASD THEN RETURN NULL;
ELSEIF A IS NULL THEN RETURN NULL;
ELSE RETURN 1;
END IF;
END

Вывод:

[null]
[null]
[null]
[null]
[null]

Я хочу вывод:

[null]
[null]
1
[null]
[null]

Вы можете мне помочь?

1 Ответ

1 голос
/ 16 января 2020

Попробуйте следующее:

CREATE OR REPLACE
FUNCTION "SCHEME"."VALIDATION01" (A VARCHAR(500)) RETURNS INT
LANGUAGE SQL
RETURN CASE WHEN A <> DEC(A, 20, 4) THEN 1 END;

Оператор CASE возвращает 1, если A IS NOT NULL И исходное значение не равно этому значению, приведенному к типу данных DECIMAL(20, 4). В противном случае возвращается NULL.
Пользователь обязан вызывать эту функцию с правильным строковым параметром, чтобы избежать ошибок преобразования типов данных из числа в строку.

...