Auto incrementar uma string que é separada por pontos.
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.
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
Curtidas 0
Respostas
Renato Rubinho
07/01/2015
Buenas,
Segue um exemplo. Testei por cima no Oracle e no Firebird e funcionou.
Abraççç,
rrubinho
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
GOSTEI 0