Select RowNum no FB
12/01/2005
0
tabela clientes
id nome
---------------------
2 Carlos
5 Marcos
6 Maria
8 Fulano
10 Joao
select nome, ROWNUM(nome) from clientes
Resultado: JOAO 5
Existe algo assim no FB? Onde no meu select ele me retorna o número da linha do registro?
Rodolpho123
Posts
13/01/2005
Vinicius2k
Nunca precisei utilizar este recurso, mas nunca consegui entender o que exatamente está armazenado nesta ´coluna de sistema´. Vc poderia me esclarecer ?
Quando faço este select o valor retornado é algo como um caracter especial tipo ´|´, dependendo da ferramenta GUI, mas já no ISQL parece um hash, ou algo do tipo (uma notação HEXA).
T+
14/01/2005
Afarias
Este campo é um SMALLINT e guarda 8 bytes (para tabelas) -- a forma como vc o vê é pq por padrão o interbase mostra esse campo num formato hexadecimal (como vc pode notar)
Bom esse valor não se mantem igual depois de um backup/restore -- não é algo FIXO.
E, mesmo após encerrar uma transação pode mudar -- após um COMMIT (hard commit apenas) -- pode haver o ´garbage collection´ que tornaria a posição (endereço) livre para um outro registro (registros excluídos)
Existem alguns ´usos´ para este campo, como sugerido por [b:b5db53f2dc]Claudio Valderrama[/b:b5db53f2dc] em seus artigos (ótimo site: http://www.cvalde.net/) :
1- A db_key é mais veloz que uma chave primária (visto q trata-se do endereço do registro - a chave tem ainda q ser convertida nesse endereço)
2- Algumas tabelas não tem chave primária e fica difícil excluir um registro duplicado (todos os campos iguais)
entre outros...
Sugiro como leitura:
http://www.cvalde.net/document/mysteriousDbKey.htm
http://www.cvalde.net/document/practical_use_of_the_rdb.htm
existe uma tradução do 2º artigo por [b:b5db53f2dc]Carlos H. Cantu[/b:b5db53f2dc] tb:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=262
Espero q ajude.
T+
14/01/2005
Vinicius2k
Eu, realmente, não fazia idéia do que exatamente era e de como usar a db_key.
Vc ajudou muito !
T+
19/10/2006
Tiagorocha
Minha intenção é criar uma chave primária em uma tabela que ainda não possui para resolver alguns problemas que ocorrem quando tento editar registros. Para isso criei um campo inteiro simples (CODDEPEND), um generator (CODDEPEND) e uma procedure (ATRIBUICOD) para tentar numerar esses registros antes de aplicar as restrições de chave primária ao campo.
A procedure compila sem nenhum problema, mas quando tento executá-la recebo a seguinte mensagem de erro (um erro de conversão entre variáveis, um ´type mismatch´) :
Overflow occurred during data type conversion. conversion error from string "„".
Onde é que estou errando?
CREATE PROCEDURE ATRIBUICOD AS DECLARE VARIABLE CHAVEBD INTEGER; BEGIN FOR SELECT RDB$DB_KEY FROM DEPENDENTES INTO :CHAVEBD DO UPDATE DEPENDENTES SET CODDEPEND=GEN_ID(CODDEPEND,1) WHERE RDB$DB_KEY=:CHAVEBD; SUSPEND; END
Clique aqui para fazer login e interagir na Comunidade :)