Pequenas Dúvidas - Tabelas e Outros

23/10/2005

0

Pessoal, tenho algumas dúvidas, e quem puder muito grato:

1) bom, no Firebird eu consigo pegar o nome de tabelas, views, procedures e triggers através de um comando sql, isso porque, algumas vezes o famoso GetTableNames de alguns datasets não funciona.
Bom, minha dúvida é, como posso pegar o nome dessas objetos do banco, através de algum comando interno do banco ou instrução SQL??

2) Como posso gerar uma numeração para as linhas retornadas de um select ? Tipo assim, no DB2 uso o Row_Number(), dessa forma: SELECT ROW_NUMBER() OVER() AS LINHA, NOME FROM TABELA ORDER BY CODIGO e na coluna chamada LINHA, tenho um tipo de sequencia, que começa em 1 e vai até a quantidade de registros listados. Existe algo parecido no postgree, ou tenho que usar um procedure?

3) Tem como gerar uma consulta do tipo CrossTab através de um select (igual ao do SQLServer e Access - Select Coluna1, COluna2, COluna3 from tabela Pivot Coluna1), isto é, pegar o conteúdo de uma coluna e transformar em linha (cabeçalho)??


Firekiller

Firekiller

Responder

Posts

23/10/2005

Bon Jovi

1 - Veja na documentacao:
http://www.postgresql.org/docs/8.0/static/information-schema.html

Exemplo básico:

select * from information_schema.tables
where table_schema = ´public´
and table_type = ´BASE TABLE´;

2 - Não tem essa função do DB2, pelo menos até a versão 7.4 tenho certeza que nao, mas vc pode criar um Sequence temporario.

Ex.:

create temp sequence row_number;
-----------------------------------------
//sua query
select nextval(´row_number´) as numero_linha, * from tabela;
-----------------------------------------
drop sequence row_number;

3 - Assim automatico eu não conheço. Talvez tenha que fazer na unha mesmo.


Responder

24/10/2005

Firekiller

Valeu Bon Jovi, muito obrigado pelas dicas!

Bom, quanto ao problema 1, está resolvido, já o problema 2 creio que não. Pois pense só, se eu tiver 2 ou mais máquinas acessando ao mesmo tempo a mesma consulta, o contador de uma delas estaria errado, ou seja, continuaria, ou pegaria valores faltando. Teria algum comando do tipo do EXECUTE STATEMENT do firebird para que eu possa fazer isso em tempo de execução. A outra coisa, posso declarar direto dentro de procedures comandos do tipo CREATE SEQUENCE, CREATE TABLE, etc???

Quanto ao problema 3, achei 2 funções chamadas crosstab e crosstab2, porém não consegui fazer funcionar, alguém poderia me dizer se estas funções funcionam gerando uma crosstab mesmo??

Um outro problema é com a função CUBE do postgree. No DB2, ela gera um tipo de relatório, de acordo com o agrupamento, mas no Postgree ela tá dando um erro. Alguém sabe como utilizá-la??


Só lembrando, estou usando Postgree 8.2.


Responder

24/10/2005

Leonardoffsilva

No postgreSQL temos os Oid´s que são numerações físicas dos registros. Mas não é muito recomendado operar com eles não!

A versão mais recente do PostgreSQL é a 8.04. A 8.1 ainda deve sar antes do fim deste ano!


Responder

24/10/2005

Firekiller

Desculpe pela falha, é a versão 8.0... mas de qualquer forma meus problemas ainda persistem, pois o OID é a numeração física do registro, mas preciso de uma numeração temporária (apenas para o select).

Por exemplo se tenho os seguintes dados

ID..............|...NOME..............
1................|...B
2................|...A

Se seu colocar SELECT * FROM TABELA, o campo com ID = 1 terá o valor dessa coluna (ROW_NUMBER() ? ) igual a 1, já se eu colocar assim, SELECT * FROM TABELA ORDER BY NOME ele tera o valor da coluna igual a 2.

E quanto ao crosstab ???


Responder

24/10/2005

Bon Jovi

já o problema 2 creio que não. Pois pense só, se eu tiver 2 ou mais máquinas acessando ao mesmo tempo a mesma consulta, o contador de uma delas estaria errado, ou seja, continuaria, ou pegaria valores faltando
Não entendi, pois funciona. Ao criar um TEMP SEQUENCE, somente a sessão do usuário que a criou irá enxergar a mesma, ou seja, cada um terá sua sequência de forma independente.

A outra coisa, posso declarar direto dentro de procedures comandos do tipo CREATE SEQUENCE, CREATE TABLE, etc???
Nao sei te responder pois nao costumo criar functions no banco.

Qto à outras questões, crie um tópico pra cada coisa que é melhor.


Responder

25/10/2005

Firekiller

Bom, obrigado pela atenção, e realmente o problema foi resolvido (em partes) mas por enquanto já dá pra eu me virar.

Vou seguir seu conselho e abrir um novo post então.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar