Fórum Auto incrementar uma string que é separada por pontos. #506486

07/01/2015

0

Bom dia galera,

Eu estou quebrando a cabeça para resolver o meu problema de auto incrementação dessa string! O meu problema é o seguinte eu tenho uma tabela de plano de contas e nela eu preciso de um campo "CODIGO" onde deveria ficar assim.

1 DESPESAS FIXAS
1.1 AGUA
1.2 LUZ
1.3 SUPERMERCADO
1.3.1 COMPRAS
1.4 ALUGUEL
1.4.1 CASA
1.4.2 ESCRITORIO

2 CARRO
2.1 COMBUSTIVEL
2.2 MANUTENCAO


O meu problema é que eu não sei como vou fazer para auto incrementar o segundo, terceiro digito.
Nícolas Braz

Nícolas Braz

Responder

Posts

07/01/2015

Renato Rubinho

Buenas,

Segue um exemplo. Testei por cima no Oracle e no Firebird e funcionou.

CREATE TABLE TESTE_RTR(TESTE VARCHAR(20));
INSERT INTO TESTE_RTR (TESTE) VALUES('1');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.1');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.2');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.3');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.3.1');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.4');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.4.1');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.4.2');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.14');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.14.1');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.14.2');
INSERT INTO TESTE_RTR (TESTE) VALUES('1.14.3');
INSERT INTO TESTE_RTR (TESTE) VALUES('2');
INSERT INTO TESTE_RTR (TESTE) VALUES('2.1');
INSERT INTO TESTE_RTR (TESTE) VALUES('2.2');

// ORACLE
SELECT 
MAX(TO_NUMBER(SUBSTR(TESTE,LENGTH(:PREFIXO) + 1,
CASE WHEN INSTR(SUBSTR(TESTE,LENGTH(:PREFIXO) + 1,LENGTH(TESTE)),'.') > 0 THEN 
  INSTR(SUBSTR(TESTE,LENGTH(:PREFIXO) + 1,LENGTH(TESTE)),'.') - 1 
ELSE 
  LENGTH(SUBSTR(TESTE,LENGTH(:PREFIXO) + 1,LENGTH(TESTE)))
END
))) + 1 NEXTVAL
FROM TESTE_RTR
WHERE SUBSTR(TESTE,1,LENGTH(:PREFIXO)) = :PREFIXO

//FIREBIRD
SELECT 
MAX(CAST(SUBSTRING(TESTE FROM CHAR_LENGTH(CAST(:PREFIXO AS VARCHAR(20))) + 1 FOR
CASE WHEN POSITION('.',SUBSTRING(TESTE FROM CHAR_LENGTH(CAST(:PREFIXO AS VARCHAR(20))) + 1 FOR CHAR_LENGTH(TESTE))) > 0 THEN
  POSITION('.',SUBSTRING(TESTE FROM CHAR_LENGTH(CAST(:PREFIXO AS VARCHAR(20))) + 1 FOR CHAR_LENGTH(TESTE))) - 1
ELSE 
  CHAR_LENGTH(SUBSTRING(TESTE FROM CHAR_LENGTH(CAST(:PREFIXO AS VARCHAR(20))) + 1 FOR CHAR_LENGTH(TESTE)))
END
) AS INTEGER)) + 1 NEXTVAL
FROM TESTE_RTR
WHERE SUBSTRING(TESTE FROM 1 FOR CHAR_LENGTH(CAST(:PREFIXO AS VARCHAR(20)))) = :PREFIXO


Abraççç,
rrubinho
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar