- Este tópico contém 26 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 3 meses atrás por
gsmdf.
-
AutorPosts
-
21 de dezembro de 2009 às 8:46 pm #91669
sancler
ParticipanteOps, desculpa ai pessoal!
uma forma mais objetiva de resolver o problema seria simplesmente concatenar o ‘V_’ com as colunas dentro de substr()
substr(‘V_’||colunaTabelaNãoAuditada 1, 30)
Ai sim ficaria melhorzinho…
Vlw.
22 de dezembro de 2009 às 3:50 pm #91682gsmdf
Participante[quote=”sancler”:2dibgivz]Ops, desculpa ai pessoal!
uma forma mais objetiva de resolver o problema seria simplesmente concatenar o ‘V_’ com as colunas dentro de substr()
substr(‘V_’||colunaTabelaNãoAuditada 1, 30)
Ai sim ficaria melhorzinho…
Vlw.[/quote]
Mas ai não levaria em conta os campos N_nomeColunaPK. Pois quando o campo é PK na tabela auditoria tem que haver N_nomeColuna e V_nomeColuna.
O select funcionando mas não tratando os casos que trunca o campo tá assim:
(select t1.table_name, 'N_' || t1.column_name as COLUNAS_FALTANTES
from DBA_CONS_COLUMNS t1 join DBA_CONSTRAINTS t2
on t1.constraint_name = t2.constraint_name
and t1.owner = t2.owner
and t1.table_name = t2.table_name
and t1.owner = 'Owner'
and t2.constraint_type = 'P'
union all
select table_name, 'V_' || column_name
from DBA_TAB_COLUMNS
where owner = 'Owner')
minus
select table_name, column_name
from dba_tab_columns
where owner = 'OwnerAuditoria'Tentei jogar substr(1,28) nas column_name do Owner e (3,30) no column_name do ownerAuditoria mas não deu certo…
22 de dezembro de 2009 às 4:20 pm #91684sancler
Participantegsmdf
continuei contatenando da forma que eu coloquei no último post, mas use a função substr(3,30) nas duas tabelas.
posta ai se resolveu ou não blz?
Att,
22 de dezembro de 2009 às 4:39 pm #91685gsmdf
Participante
(select t1.table_name, 'N_' || substr(t1.column_name,3,30) as COLUNAS_FALTANTES
from DBA_CONS_COLUMNS t1 join DBA_CONSTRAINTS t2
on t1.constraint_name = t2.constraint_name
and t1.owner = t2.owner
and t1.table_name = t2.table_name
and t1.owner = 'TCU'
and t2.constraint_type = 'P'
union all
select table_name, substr('V_' || column_name,3,30)
from DBA_TAB_COLUMNS
where owner = 'TCU')
minus
select table_name, substr(column_name,3,30)
from dba_tab_columns
where owner = 'AUDIT_TCU'Coloquei 3,30 nas 3 column_name e não deu.
22 de dezembro de 2009 às 4:44 pm #91686sancler
ParticipanteTira o substr() dessa parte do código
minus
select table_name, column_name
from dba_tab_columns
where owner = ‘AUDIT_TCU’22 de dezembro de 2009 às 5:07 pm #91687burga
ParticipanteNa verdade o erro está na primeira substr…
Está assim:
‘N_’ || substr(t1.column_name,3,30)enquanto devia estar assim:
substr(‘N_’ || t1.column_name,3,30)
Mas o mais correto eu acredito que seria com substr iniciando no primeiro caracter e não no terceiro, pra contar as pks da auditoria…
22 de dezembro de 2009 às 5:35 pm #91688gsmdf
Participante[quote=”burga”:cc3hwbrl]Na verdade o erro está na primeira substr…
Está assim:
‘N_’ || substr(t1.column_name,3,30)enquanto devia estar assim:
substr(‘N_’ || t1.column_name,3,30)
Mas o mais correto eu acredito que seria com substr iniciando no primeiro caracter e não no terceiro, pra contar as pks da auditoria…[/quote]
Realmente isto estava errado, agora consertei:
(select t1.table_name, substr('N_' || t1.column_name,3,30) as COLUNAS_FALTANTES
from DBA_CONS_COLUMNS t1 join DBA_CONSTRAINTS t2
on t1.constraint_name = t2.constraint_name
and t1.owner = t2.owner
and t1.table_name = t2.table_name
and t1.owner = 'TCU'
and t2.constraint_type = 'P'
union all
select table_name, substr('V_' || column_name,3,30)
from DBA_TAB_COLUMNS
where owner = 'TCU')
minus
select table_name, substr(column_name,3,30)
from dba_tab_columns
where owner = 'AUDIT_TCU'
Porém a primeira instancia que retorna já está errada:
No owner TCU há a coluna COD_MEMBRO_MINISTERIO_PUBLICO.
Ai no owner AUDIT a coluna vira V_COD_MEMBRO_MINISTERIO_PUBLIC.E o select está retornando como coluna faltante COD_MEMBRO_MINISTERIO_PUBLICO.
22 de dezembro de 2009 às 5:43 pm #91689sancler
Participantegsmdf
Tira a função substr logo depois do minus.
Acho que vai funcionar.
22 de dezembro de 2009 às 5:50 pm #91691gsmdf
Participante[quote=”sancler”:1ua2y9am]gsmdf
Tira a função substr logo depois do minus.
Acho que vai funcionar.[/quote]
Não funciona pq ai por exemplo no caso citado acima sem o substr ali das tabelas de auditoria vai retornar V_COD_MEMBRO_MINISTERIO_PUBLIC que não vai bater com os dois primeiros selects que estão pegando 30 caracteres a partir do 3º (tirando assim o prefixo V_ ou N_).
22 de dezembro de 2009 às 5:54 pm #91692sancler
Participanteentão vc vai ter que concatenar outra vez, assim como fez, assim como fez nessa parte do select
substr(‘N_’ || t1.column_name,3,30) as COLUNAS_FALTANTESTenta ai e posta o resultado.
22 de dezembro de 2009 às 7:02 pm #91698burga
Participantecomo eu destaquei no post anterior, em todas as funções substr, coloque 1 no segundo parâmetro que funciona…
Ou se for deixar iniciando em 3, deixe com 28 no terceiro parâmetro!!!!
22 de dezembro de 2009 às 7:16 pm #91701gsmdf
Participante[quote=”sancler”:6n09iwez]então vc vai ter que concatenar outra vez, assim como fez, assim como fez nessa parte do select
substr(‘N_’ || t1.column_name,3,30) as COLUNAS_FALTANTESTenta ai e posta o resultado.[/quote]
Mas eu não entendo como concatenar com N_ ou V_ vai ajudar na parte do minus, na tabela de auditoria se as colunas nesta tabela já tem no nome delas N_ ou V_. O resultado seria N_N_nomeColuna ou V_V_nomeColuna não ?
-
AutorPosts
- Você deve fazer login para responder a este tópico.