Tengo una función como esta, que verifica el tipo de cuenta apropiado:
CREATE OR REPLACE FUNCTION acc_is_exclusive(acc_no integer, acc_type char) RETURNS integer AS $$ BEGIN RETURN (SELECT 1 FROM account WHERE account_no = acc_no AND account_type = acc_type); END; $$ LANGUAGE plpgsql;El tipo de retorno es entero, y si no se encuentra ningún registro, será NULL en su lugar. ¿Tiene algún sentido? ¿O necesito declarar explícitamente de alguna manera que el tipo de retorno será entero o nulo?
Podrías usar la lógica EXISTS aquí:
CREATE OR REPLACE FUNCTION acc_is_exclusive(acc_no integer, acc_type char) RETURNS boolean AS $$ BEGIN RETURN EXISTS (SELECT FROM account WHERE account_no = acc_no AND account_type = acc_type); END; $$ LANGUAGE plpgsql;Esto devolvería verdadero o falso, dependiendo de si se puede encontrar o no un registro coincidente.
El estándar SQL dice:
Cada tipo de datos incluye un valor especial, llamado valor nulo , a veces indicado por la palabra clave
NULL.
Por lo tanto, no hace falta decir que puede devolver NULL como un resultado integer , porque NULL es un valor válido para cualquier tipo de datos.