Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hellyson

[Resolvido] Select em uma tabela que não sei o nome.

Recommended Posts

Boa tarde senhores e senhoras.

 

Mais uma ajuda para um leigo.

 

No sistema que utilizo, é criado o nome da tabela, que é um código gerado automaticamente, e a view que é o nome que o programador dá para o formulário.

 

Exemplo:

 

Nome do Formulário: NOMECLIENTE:REGULAR-CADASTRO

 

Ai o sistema cria a view:

 

Nome da View: NOMECLIENTE_REGULAR_CADASTRO

Nome da tabela: t4321

 

O sistema cria em uma tabela auxiliar a relação das duas:

 

select tabelaid, tabelaname from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO'

tabelaid = t4321

tabelaname = NOMECLIENTE:REGULAR-CADASTRO

tabelaview = NOMECLIENTE_REGULAR_CADASTRO

 

O problema é que para cada servidor, o id da tabela é gerado na hora e muda, ou seja, desenvolvimento tem um id, homologação outro e produção outro, o que preciso é de um select na tabela, tem que ser na tabela, e usando o nome, exemplo:

select * from (select concattabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO')

 

Existe essa possibilidade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi bem a sua dúvida.

 

O que você chama de "tabela" é na realidade a chave de um registro de uma tabela/view que existe a admtabelas, creio que seu problema se resuma a obter esta chave.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi bem a sua dúvida.

 

O que você chama de "tabela" é na realidade a chave de um registro de uma tabela/view que existe a admtabelas, creio que seu problema se resuma a obter esta chave.

 

Então Motta,

 

Eu sei como conseguir o nome da tabela:

select tabelaid** from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO'

 

**tabelaid é o campo que armazena o nome da tabela, vamos dizer que retornaria o valor t1234

 

Agora eu precisava dar um select nessa tabela, tudo na mesma string, ao asssim:

select * from (select tabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO')

 

 

Ou seja, seria mesma coisa que o select:

select * from t1234

 

Não sei se fui claro

Compartilhar este post


Link para o post
Compartilhar em outros sites

tabelaid tem algum tipo especial (table etc) ?

 

Existe o comando CAST que pode ser útil.

 

Todavia esta síntaxe

select * from (select tabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO')

funciona, mas é o mesmo que a sub-query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tabelaid tem algum tipo especial (table etc) ?

 

Existe o comando CAST que pode ser útil.

 

Todavia esta síntaxe

select * from (select tabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO')

funciona, mas é o mesmo que a sub-query.

 

Então Motta,

 

Esse campo tabelaid é o nome, simplesmente o nome da tabela, ou seja, criei o formulário "NOMECLIENTE:REGULAR-CADASTRO" que criou a view NOMECLIENTE_REGULAR_CADASTRO no banco e essa view é da tabela T1234, ou seja, se executar o comando** irá trazer o valor T1234, essa sim é a tabela, ai eu queria fazer um outro comando*** para pegar o valor da tabela.

 

**select tabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO'

***select count(*) from T1234

 

O comando que fiz**** somente traz o nome da tabela, como se fosse somente o comando*****

 

****select * from (select tabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO')

select tabelaid from admtabelas where tabelaname = 'NOMECLIENTE:REGULAR-CADASTRO'

 

Ajudou a explicação?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ajudou a explicação?

 

Confesso que não.

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ajudou a explicação?

 

Confesso que não.

 

:)

 

Vou tentar novamente, hehehe

 

Trabalho com um sistema de workflow, eu não atuo direto no banco.

 

Quando eu preciso criar um novo formulário (dentro do sistema de workflow), eu crio e dou um nome para ele: NOMEDOCLIENTE:TIPODOFORM:NOMEDOFORMULARIO onde:

NOMEDOCLIENTE = Sigla de um dos nossos clientes

TIPODOFORM = Se ele armazena dados (RF de regular form) ou se exibe dados (VF de view form)

NOMEDOFORMULARIO = È a regra de negócio, ex: CadastroCliente, ControlePedidos, etc

 

O sistema de workflow tem uma tabela de controle de tabelas criadas, é a tabela "tabelaname" onde armazena o nome do formulário (NOMEDOCLIENTE:TIPODOFORM:NOMEDOFORMULARIO ex:GLOBO:RF:CadastroClientes) o nome da view (substitui espaços e caracteres especiais para _ "underline", ex GLOBO_RF_CadastroClientes) e o nome da tabela que é um número sequencial com o prefixo "t", exemplo: t1401.

 

Só que ai tem um problema, em cada ambiente o momento de criar um formulário pode ser diferente, exemplo:

 

Desenvolvimento - Ordem de Criação:

Formulário - View - Tabela

GLOBO:RF:CadastroCliente - GLOBO_RF_CadastroCliente - t1500

GLOBO:RF:CadastroFuncionarios - GLOBO_RF_CadastroFuncionarios - t1501

ABRIL:RF:CadastroCliente - ABRIL_RF_CadastroCliente - t1502

ABRIL:RF:CadastroFuncionarios - ABRIL_RF_CadastroFuncionarios - t1503

 

Homologação - Ordem de Criação:

Formulário - View - Tabela

GLOBO:RF:CadastroFuncionarios - GLOBO_RF_CadastroFuncionarios - t1500

GLOBO:RF:CadastroCliente - GLOBO_RF_CadastroCliente - t1501

ABRIL:RF:CadastroCliente - ABRIL_RF_CadastroCliente - t1502

ABRIL:RF:CadastroFuncionarios - ABRIL_RF_CadastroFuncionarios - t1503

 

Produção - Ordem de Criação:

Formulário - View - Tabela

GLOBO:RF:CadastroFuncionarios - GLOBO_RF_CadastroFuncionarios - t1500

GLOBO:RF:CadastroCliente - GLOBO_RF_CadastroCliente - t1501

ABRIL:RF:CadastroFuncionarios - ABRIL_RF_CadastroFuncionarios - t1502

ABRIL:RF:CadastroCliente - ABRIL_RF_CadastroCliente - t1503

 

Ou seja, existe alguns casos que eu preciso criar um fluxo que executa uma query direto na tabela, não pode ser na view, porém não dá para ter ctz que se eu executar o comando select count(*) from t1502, se vai trazer os dados da tabela ABRIL:RF:CadastroFuncionarios ou ABRIL:RF:CadastroCliente.

 

O que eu preciso é fazer um select com ctz na tabela que pertence o ABRIL:RF:CadastroCliente e para isso precisaria buscar o ID, seria mais ou menos assim:

 

select * from (

select tabelaid from admtabelas where tabelaname = 'ABRIL:RF:CadastroCliente')

 

Com esse comando (se funcionasse), não importa o servidor, em qualquer ambiente que fosse executado, ele traria os dados da tabela de ABRIL:RF:CadastroCliente.

 

Ajudou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela t1500 então existe fisicamente.

 

A questão agora seria obter saber a que ela se refere pois em um ambiente ela pode ser uma coisa e em outro, outra.

 

Uma solução seria criar um sinonimo quando houvesse a criação da tabela

 

Algo assim :

 

CREATE SYNONYM syn_GLOBO_RF_CadastroFuncionarios for t1500 

 

Bastaria então

 

SELECT * FROM syn_GLOBO_RF_CadastroFuncionarios

 

Em cada ambiente haveria um sinonimo apontando para sua respectiva tabela.

 

Creio que resolva.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela t1500 então existe fisicamente.

 

A questão agora seria obter saber a que ela se refere pois em um ambiente ela pode ser uma coisa e em outro, outra.

 

Uma solução seria criar um sinonimo quando houvesse a criação da tabela

 

Algo assim :

 

CREATE SYNONYM syn_GLOBO_RF_CadastroFuncionarios for t1500 

 

Bastaria então

 

SELECT * FROM syn_GLOBO_RF_CadastroFuncionarios

 

Em cada ambiente haveria um sinonimo apontando para sua respectiva tabela.

 

Creio que resolva.

 

Valeu Motta, vou experimentar amanhã quando eu chegar no trabalho

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela t1500 então existe fisicamente.

 

A questão agora seria obter saber a que ela se refere pois em um ambiente ela pode ser uma coisa e em outro, outra.

 

Uma solução seria criar um sinonimo quando houvesse a criação da tabela

 

Algo assim :

 

CREATE SYNONYM syn_GLOBO_RF_CadastroFuncionarios for t1500 

 

Bastaria então

 

SELECT * FROM syn_GLOBO_RF_CadastroFuncionarios

 

Em cada ambiente haveria um sinonimo apontando para sua respectiva tabela.

 

Creio que resolva.

 

Motta, funcionou perfeitamente, criei nos 3 ambientes os sinonimos e fiz os testes, valeu, obrigadão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.