Я пытался создать функцию postgres, которая возвращает таблицу, но когда я выполняю функцию, оператор return должен закрыть или завершить всю функцию, однако он продолжает игнорировать это окончание, и продолжается.
Функция довольно проста: она просто проходит проверку, если поля пусты. Я знаю, что если я поставлю ELSE заявление, проблема будет решена, однако я не знаю, почему оно игнорирует RETURN , и мне любопытно узнать, есть ли другой способ ELSE , чтобы решить проблему
create or replace function fnRegisterUserWin(rUsername text, rFname text, rLname text,rRole text, rBrand text) returns table(id_users int, message text, is_failure_location text, error_fields text[])
language plpgsql
as $$
declare
sanitazedUsername text;
sanitazedFirstname text;
sanitazedLastname text;
sanitazedRole text;
sanitazedBrand text;
errorFields text;
begin
sanitazedUsername := str_clean(rUsername,true,true,true,true,true,true,true);
sanitazedFirstname := str_clean(rFname,true,true,true,true,true,true,true);
sanitazedLastname := str_clean(rLname,true,true,true,true,true,true,true);
sanitazedRole := str_clean(rRole,true,true,true,true,true,true,true);
sanitazedBrand := str_clean(rBrand,true,true,true,true,true,true,true);
errorFields := '';
if(empty2null(sanitazedUsername) is null OR empty2null(sanitazedFirstname) is null OR
empty2null(sanitazedLastname) is null OR empty2null(sanitazedRole) is null OR
empty2null(sanitazedBrand) is null) then
if(empty2null(sanitazedUsername) is null) then errorFields := errorFields || chr(39) || 'Username' || chr(39); end if;
if(empty2null(sanitazedFirstname) is null) then errorFields := errorFields || ',' || chr(39) || 'Firstname' || chr(39); end if;
if(empty2null(sanitazedLastname) is null) then errorFields := errorFields || ',' || chr(39) || 'Lastname' || chr(39); end if;
if(empty2null(sanitazedRole) is null) then errorFields := errorFields || ',' || chr(39) || 'Role' || chr(39); end if;
if(empty2null(sanitazedBrand) is null) then errorFields := errorFields || ',' || chr(39) || 'Brand' || chr(39); end if;
return query select 0 as id_users, 'There are required fields that are empty, please complete them and try again. '::text as message,'Empty Fields'::text as is_failure_location,ARRAY[ltrim(',sa,aaa',',')]as errorFields;
end if;
return query execute 'select 0 as id_users, ' || chr(39) || 'There are required fields that are empty, please complete them and try again. ' || chr(39) || '::text as message,' || chr(39) || 'Empty Fields' || chr(39) || '::text as is_failure_location,ARRAY[' || ltrim(errorFields,',') ||']as errorFields';
end;
$$;
create function empty2null(text_i character varying)
returns character varying
language plpgsql
as $$
declare
text_p varchar;
begin
if text_i = ''
then text_p := null;
else text_p := text_i;
end if;
return text_p;
end;
$$;
alter function empty2null(varchar)
owner to postgres;
это возвращение:
0 Обязательные поля заполнены, заполните их и
Попробуйте снова. Пустые поля {'Имя'}
0 Заполните обязательные поля, заполните их и
Попробуйте снова. Пустые поля {Имя}