Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ROWNUM() en FirebirdSQL (https://www.clubdelphi.com/foros/showthread.php?t=76235)

Zeta 18-10-2011 02:49:58

ROWNUM() en FirebirdSQL
 
Hola a todos,

Estaba probando unas consultas con Firebird y he leído por ahí que no trae la función ROWNUMBER.
La idea es que cada registro tenga un número desde 1.

¿Cuál sería una forma fácil de implementarla?
Código SQL [-]
SELECT
     rdb$get_context('USER_TRANSACTION', 'row#') as row_number,
     rdb$set_context('USER_TRANSACTION', 'row#', 
     coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#') as integer), 0) + 1),
    PERSONAL.NOMBRES,
    PERSONAL.APELLIDOS
FROM
    PERSONAL


El problema de este código es que sigo aumentando en uno cada vez que hago la misma consulta.

De otra forma tendré que implementarla desde delphi, pero quería hacerla desde la DB.



Saludos.

mightydragonlor 18-10-2011 05:31:59

Perdona mi ignorancia, ¿para que necesitas el rownumber?

Luis F. Orjuela 18-10-2011 07:28:12

Yo solucioné esa necesidad utilizando un PROCEDIMIENTO ALMACENADO, a continuación te muestro uno:
Código SQL [-]
CREATE PROCEDURE CUENTAS_TERCE(
  NIT VARCHAR(12) CHARACTER SET NONE)
RETURNS(
  NRO SMALLINT,
  CTA_LOCAL INTEGER,
  CTA_CORPO INTEGER)
AS
BEGIN
  NRO = 0;
  FOR SELECT CUENTA_LOCAL,CUENTA_CORPO FROM CUENTAS_TERCEROS
    WHERE NIT_TERCERO = :NIT
  into :CTA_LOCAL,:CTA_CORPO

  DO  
    BEGIN
     NRO = NRO +1;
     SUSPEND;
    END 
END

Y este es el resultado obtenido:

Código SQL [-]
  NRO  CTA_LOCAL  CTA_CORPO 
    1   23651501     224400 
    2   51104001     669900 
    3   51159502     771100 
    4   52159502     771100 
    5   51104001     664500 
    6   51150500     771100 
    7   51400501     725200 
    8   51401501     725200 
    9   51954501     712100

Zeta 18-10-2011 23:53:43

Cita:

Empezado por mightydragonlor (Mensaje 415955)
Perdona mi ignorancia, ¿para que necesitas el rownumber?

Solamente para especificar un nro. de orden, nada prioritario, lo quería hacer desde la base de datos.

Zeta 19-10-2011 00:12:48

Gracias Luis,tu código funciona perfecto!




Saludos y Gracias


La franja horaria es GMT +2. Ahora son las 10:21:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi