Обрабатывать значения NULL для целочисленного поля в функции - PullRequest
0 голосов
/ 30 сентября 2019

Я создал функцию для вставки / обновления записи в таблице. Данные передаются в функцию в качестве аргументов. Столкнувшись с проблемой обработки полей типа Integer / float / double. Например, я объявил поле Empno как Int (согласно структуре целевой таблицы). Поэтому я подумал, что когда приходит нулевое значение, я конвертирую в '0', используя функцию приведения. Но он даже не принимает значения NULL, поскольку он объявлен как Int. я должен изменить объявление на varchar и затем преобразовать? Что я должен делать ? Пожалуйста, помогите

Ошибка, которую я получаю, оператор не существует: текст целое число 42883

Пример кода:

create function test (text[])  
declare  
companycode varchar(4);  
empno varchar(10);  
begin  
L_1 := $1[1];  
L_2 :=cast(NULLIF($1[2],0) as int);  
update and insert statement ...  
end;  

1 Ответ

1 голос
/ 30 сентября 2019

NULLIF() изменяет указанное значение на NULL, а не наоборот. Вместо этого используйте IFNULL() или COALESCE().

Также сначала измените порядок операций на CAST, примерно так:

COALESCE($1[2]::int, 0)
...