[firebase-br] Numero sequencial por item

Flavio Divino flaviodivino em gmail.com
Sáb Jan 16 17:54:19 -03 2016


Olá pessoal, preciso atualizar um campo (ZF4_CODBEN) de forma sequencial
conforme o codigo do contrato vai mudando.
Exemplo:

select first 20
 zf4.zf4_contra,
 zf4.zf4_tipo,
 ZF4.zf4_codben,
 zf4.zf4_nome
from zf4
order by zf4.zf4_contra, zf4.zf4_tipo desc

Essa consulta me retorna isso:

+---------------------+-----------------+---------------------+----------------------------------------------------------------------------+
| ZF4_CONTRA | ZF4_TIPO | ZF4_CODBEN | ZF4_NOME
                              |
+---------------------+-----------------+---------------------+----------------------------------------------------------------------------+
| 000001           | T | | JOAO GREGORIO DA SILVA

| 000001 | F | | JOSE GREGORIO DA SILVA
| 000001           | D  | | NACI DE OLIVEIRA SILVA

| 000001           | D | | PEDRO DE OLIVEIRA

| 000001           | D  | | ALCEDINA JOSEFA DO NASCIMENTO
| 000001           | D  | | GLEICE HELEN MARTINS DUARTE SANTOS
| 000001           | D  | | ANNA LUCIA NASCIMENTO
| 000002           | T  | | JOSE LAUREANO DE SOUZA
| 000002           | F  | | CAROLINA MARIA DE JESUS
| 000002           | F  | | ANTONIO LAUREANO DE SOUZA
| 000002           | F  | | EVA PEREIRA DE ABREU
| 000002           | D  | | NILMA ABREU DE SOUZA
| 000002           | D  | | VILMA ABREU DE SOUZA
| 000002           | D  | | VILMAR ABREU DE SOUZA
| 000002           | D  | | ROSALINA ABREU DE SOUZA
| 000003           | T  | | DORALICE BORGES REIS
| 000003           | F  | | JOSE LUIZ MISCENA BORGES
| 000003           | D  | | MARINALVA MISCENA BORGES
| 000003           | D  | | MARIA DE JESUS REIS BORGES
| 000003           | D  | | MARILYA BRASILIA NASCIMENTO BORGES
+---------------------+-----------------+---------------------+----------------------------------------------------------------------------+

E na verdade eu precisaria disso:

+---------------------+-----------------+---------------------+----------------------------------------------------------------------------+
| ZF4_CONTRA | ZF4_TIPO | ZF4_CODBEN | ZF4_NOME
                              |
+---------------------+-----------------+---------------------+----------------------------------------------------------------------------+
| 000001           | T | 1 | JOAO GREGORIO DA SILVA

| 000001 | F | 2 | JOSE GREGORIO DA SILVA
| 000001           | D  | 3 | NACI DE OLIVEIRA SILVA

| 000001           | D | 4 | PEDRO DE OLIVEIRA

| 000001           | D  | 5 | ALCEDINA JOSEFA DO NASCIMENTO
| 000001           | D  | 6 | GLEICE HELEN MARTINS DUARTE SANTOS
| 000001           | D  | 7 | ANNA LUCIA NASCIMENTO
| 000002           | T  | 1 | JOSE LAUREANO DE SOUZA
| 000002           | F  | 2 | CAROLINA MARIA DE JESUS
| 000002           | F  | 3 | ANTONIO LAUREANO DE SOUZA
| 000002           | F  | 4 | EVA PEREIRA DE ABREU
| 000002           | D  | 5 | NILMA ABREU DE SOUZA
| 000002           | D  | 6 | VILMA ABREU DE SOUZA
| 000002           | D  | 7 | VILMAR ABREU DE SOUZA
| 000002           | D  | 8 | ROSALINA ABREU DE SOUZA
| 000003           | T  | 1 | DORALICE BORGES REIS
| 000003           | F  | 2 | JOSE LUIZ MISCENA BORGES
| 000003           | D  | 3 | MARINALVA MISCENA BORGES
| 000003           | D  | 4 | MARIA DE JESUS REIS BORGES
| 000003           | D  | 5 | MARILYA BRASILIA NASCIMENTO BORGES
+---------------------+-----------------+---------------------+----------------------------------------------------------------------------+

Tentei fazer a atualização do campo zf4_codben com uma procedure, mas ela
funciona parcialmente.

BEGIN
  FOR
    select distinct
      zf4.zf4_ctrant
    from
      zf4
    order by zf4.zf4_contra, zf4.zf4_tipo desc
    INTO :ZF4_CTRANT
  DO
  BEGIN
  SQL =  'ALTER SEQUENCE CONTADOR RESTART WITH 0;';
  execute statement :SQL;

  UPDATE ZF4 SET
  zf4_codben = lpad(GEN_ID(CONTADOR, 1),4,'0') where zf4.zf4_ctrant =
:ZF4_CTRANT order by zf4.zf4_contra, zf4.zf4_tipo desc;

    SUSPEND;
  END
END

Não sei aonde eu possa estar errando.
Gostaria da ajuda de vocês.



Mais detalhes sobre a lista de discussão lista