Bom dia pessoal, estou passando por um problema, se alguém pudesse me ajudar...
Estou criando um gatilho que pega as colunas da tabela de forma automatica, verifica se é inserção ou update, monta a query, e em seguida da um execute immediate, porem, aparece a mensagem de que "nem todas as variaveis estao limitadas'.
Eu faco um select na tabela all_tab_columns, e pego as colunas:
colunas := i.column_name;
e já pego os valores:
col_dados := ':NEW.'||i.column_name;
e é por isso que tenho essa mensagem de erro. Mas não consegui achar uma forma para fazer funcinar.
alguém sabe de alguma coisa para contornar isso ?
algo do tipo name_in que existe no forms ou algo parecido ?
:NEW ou :OLD em triggers usando EXECUTE IMMEDIATE
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Certa vez eu tive que fazer chamadas dessa forma para várias tabelas. Já que ele não permite que seja feito o
Eu criei uma rotina que GERA todo select, pra cada tabela que eu queria. Daí eu só aplicava esse select gerado na trigger. Ou seja, só fiz um "facilitador" pra não precisar digitar cada sql.
Infelizmente, não conheço uma forma de se fazer dinamicamente isso que você quer.
variavel := ':NEW'|| vcampo;
Infelizmente, não conheço uma forma de se fazer dinamicamente isso que você quer.
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Ter, 08 Jun 2004 2:59 pm
- Localização: Toledo - PR
Boa noite Dr Gori ..
então ...
eu estava precisnado fazer algo dinamico e generico, pra prevenir alteracoes na estrutura da tabela.
Mas em gatilho não vejo uma forma de pegar o valor que esta sendo inserido ou atualizado...
Apenas consigo pegar os dados usando a referencia :new.campo ... mas pra isso eu iria ter que deixar estatico ... e não é bem isso o que gostaria ...
você poderia colar um pedaco do seu codigo para eu dar uma olhada... vai q derepente me vem uma Luz
muito obrigado pelo seu interesse
então ...
eu estava precisnado fazer algo dinamico e generico, pra prevenir alteracoes na estrutura da tabela.
Mas em gatilho não vejo uma forma de pegar o valor que esta sendo inserido ou atualizado...
Apenas consigo pegar os dados usando a referencia :new.campo ... mas pra isso eu iria ter que deixar estatico ... e não é bem isso o que gostaria ...
você poderia colar um pedaco do seu codigo para eu dar uma olhada... vai q derepente me vem uma Luz
muito obrigado pelo seu interesse
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Infelizmente, não tenho a rotina aqui.
Mas basicamente, ela gerava os selects estáticos e eu só aplicava na trigger.
Ou seja, eu tinha uma rotina que criava o select que eu queria. Buscava os campos na USER_TAB_COLUMNS e criava o sql como eu queria. (apenas pra eu não precisar criar manualmente cada select pra cada tabela)
Entendeu ?
Mas basicamente, ela gerava os selects estáticos e eu só aplicava na trigger.
Ou seja, eu tinha uma rotina que criava o select que eu queria. Buscava os campos na USER_TAB_COLUMNS e criava o sql como eu queria. (apenas pra eu não precisar criar manualmente cada select pra cada tabela)
Entendeu ?
SQL> select ', :new.'||COLUMN_NAME
2 from user_tab_columns
3 where table_name = 'APLICATIVOS'
4 /
',:NEW.'||COLUMN_NAME
-------------------------------------
, :new.CODIGO
, :new.DESCRICAO
, :new.TIPO
, :new.ICONE
SQL>
-
- Rank: Estagiário Sênior
- Mensagens: 13
- Registrado em: Ter, 01 Nov 2005 11:53 pm
- Localização: São Paulo
- Contato:
Zida, você poderia explicar melhor o que você tem que fazer, ainda não entendi. Se você está procurando auditoria, eu tenho um exemplo no meu blog, mas não sei se é isso que você precisa.
http://mportes.blogspot.com/2005/05/aud ... seira.html
http://mportes.blogspot.com/2005/05/aud ... seira.html
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Ter, 08 Jun 2004 2:59 pm
- Localização: Toledo - PR
Estou criando gatilhos que pegarao os dados de uma tabela origem, e joagarao numa tabela espelho com os mesmos campos, porem, com alguns campos a mais para controle. Estou fazendo isso para fazer um projeto de exportação de dados do nosso sistema, que devera alimentar um outro sistema para se obeter informações gerenciais e estatisticas.
Porem, não gostaria de ficar amarrado e sempre quando a estrutura (colunas) das tabelas mudarem, eu ter que editar gatilho por gatilho na mão.
Eu já havia visto o seu exemplo numa outra pagina, não lembro qual, e a gente já usa esse esquema de criar os gatilhos, mas para esse caso não daria certo. Gostaria que fosse mais dinamico ...
Porque senao sempre que mudarem ou eu mudar a tabela, terei que rodar manualmente um primeiro script que cria o gatilho, a não ser que existe algum modo de pegar quando uma tabela foi alterada, dai posso deixar um JOB no banco e boa ...
Mas pelo que vi, esse é o modo mais "facil" e o Dr.Gori tb me passou isso.
Vamos ver o que vou fazer, vou dar uma olhada melhor nas coisas ...
Muito obrigado pela sua atenção.
Abracos
Porem, não gostaria de ficar amarrado e sempre quando a estrutura (colunas) das tabelas mudarem, eu ter que editar gatilho por gatilho na mão.
Eu já havia visto o seu exemplo numa outra pagina, não lembro qual, e a gente já usa esse esquema de criar os gatilhos, mas para esse caso não daria certo. Gostaria que fosse mais dinamico ...
Porque senao sempre que mudarem ou eu mudar a tabela, terei que rodar manualmente um primeiro script que cria o gatilho, a não ser que existe algum modo de pegar quando uma tabela foi alterada, dai posso deixar um JOB no banco e boa ...
Mas pelo que vi, esse é o modo mais "facil" e o Dr.Gori tb me passou isso.
Vamos ver o que vou fazer, vou dar uma olhada melhor nas coisas ...
Muito obrigado pela sua atenção.
Abracos
-
- Rank: Estagiário Sênior
- Mensagens: 13
- Registrado em: Ter, 01 Nov 2005 11:53 pm
- Localização: São Paulo
- Contato:
os campos de controle são fixos?
Porque se forem, você poderia guardar somente um ponteiro para a tabela real, nesse caso não importaria quanto ela mude, você teria como chegar aos dados de forma segura e os campos complementares estariam lá.
Acho que é mais um caso de projeto que solução técnica.
Me desculpe por não poder ajudar mais.
Porque se forem, você poderia guardar somente um ponteiro para a tabela real, nesse caso não importaria quanto ela mude, você teria como chegar aos dados de forma segura e os campos complementares estariam lá.
Acho que é mais um caso de projeto que solução técnica.
Me desculpe por não poder ajudar mais.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 2 visitantes