es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se puede obtener el recuento de filas devueltas en una función de postgres?

En el siguiente SQL, necesito comprobar si se devuelven más de un registro desde la cláusula select.

El _person.length no está funcionando, mientras tanto, no puedo seleccionar count(*) en otra variable.
¿Cómo sé cuántas filas se devuelven en el select entonces?

create or replace function search_users(partial_name text)
returns setof text
as $$
declare
_person record;
begin
select * into _person
from users
where name ~ partial_name;

if not found then
    return next 'No hay usuarios coincidentes';
elsif _person.length > 1 then
    return next 'Nombre de usuario ambiguo';
else
    return next _person.name;
end if;

end;
$$ language plpgsql;

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para saber cuántas filas se devuelven en la cláusula select, puedes declarar una variable de tipo entero y usar la función ROW_COUNT después de la sentencia select. Aquí hay un ejemplo:

    crear o reemplazar una función search_users (partial_name text)
    devuelve setof text
    como $$
    declarar
    _person record;
    rows_count integer;
    comienzo
    seleccionar * en _person
    desde los usuarios
    donde name ~ partial_name;
    GET DIAGNOSTICS rows_count = ROW_COUNT;

    si no encontrado entonces
        regresar siguiente 'No se encontró usuario que coincida';
    elsif rows_count > 1 entonces
        regresar siguiente 'Nombre de usuario ambiguo';
    más
        devolver siguiente _person.nombre;
    fin si;
    

    fin;
    $$ lenguaje plpgsql;

    En esta función modificada, agregamos la variable rows_count y la sentencia GET DIAGNOSTICS después de la sentencia select. La función ROW_COUNT devuelve el número de filas que fueron afectadas por el comando SQL más reciente.

    Entonces, después de ejecutar la sentencia select, obtenemos el número de filas que se seleccionaron y lo asignamos a la variable rows_count. Luego, podemos usar esta variable para verificar si se devolvió más de una fila.

    Si el rows_count es mayor que 1, entonces devolvemos ‘Nombre de usuario ambiguo’. De lo contrario, devolvemos el nombre del usuario.

Comments are closed.