Este mensaje de error traducido significa: «hay muchas filas en el SELECT y debería haber solamente una»
Y ocurre cuando el Firebird está esperando que un SELECT devuelva una y solamente una fila pero el SELECT está devolviendo más de una fila.
Ejemplo:
UPDATE MiTabla SET MiColumna = (SELECT MiOtraColumna FROM MiOtraTabla WHERE MiCondición)
¿Cuál es la solución?
El problema está en el SELECT entonces es allí donde se debe solucionar. Lo más sencillo es ejecutar solamente ese SELECT, ver cual es el conjunto resultado que devuelve y modificar el SELECT para que solamente devuelva una fila.
Para que un SELECT devuelva una fila y solamente una fila tenemos varias alternativas:
- Cambiar la condición MiCondición
- Usar FIRST 1
- Usar ROWS 1
- Usar DISTINCT
Conclusión:
El error ocurre cuando un SELECT devuelve más de una fila y debería devolver solamente una fila. La solución es revisar el SELECT para comprobar que es lo que devuelve y luego modificarlo para que devuelva solamente una fila.
Artículo relacionado:
Julio
Jun 14, 2020 @ 02:21:15
UPDATE compc10 SET NEWDOC = (select (CAST(‘COM’ AS VARCHAR(3))||CAST(CVE_DOC AS VARCHAR(20))) FROM compc10 where fecha_doc < '2030-01-01') where TIP_DOC = 'c'
En teoria lo que me deuelve el CAST es un solo valor, aun asi no me deja continuar
wrov
Jun 16, 2020 @ 16:50:30
Debes ejecutar solamente el SELECT y ver que resultados obtienes. Si te mostró el mensaje «multiple rows in singleton select» eso significa que sí o sí tu SELECT devuelve más de una fila, y debería devolver solamente 1 fila.