[oracle_br] Trigger de monitoramento de transação
Caros, Alguém tem algum script de trigger que monitora transações no banco de dados, por exemplo, eu quero saber quem fez insert, update ou delete nas tabelas, preciso saber também informações como nome do usuário, nome da tabela, o tipo de operação (insert, update, ou delete), date e hora, máquina, IP etc.. Obrigado. Att, Wanderson
Re: [oracle_br] Trigger de logon...
Sim, ai cabe ao DBA, verificar na v$session por qual programa ele está conectando com o nome do programa renomeado, agora o que você falou é a mais pura verdade, para burlar é fácil. Em Quinta-feira, 28 de Maio de 2015 16:46, Andre Santos andre.psantos...@gmail.com [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Rafael / Cristiano Mas se o desenvolvedor/analista for um pouco mais safo, basta renomear o executável para burlar isso. [ ]'s André 2015-05-28 16:24 GMT-03:00 Rafael Mendonca raffaell.t...@yahoo.com [oracle_br] oracle_br@yahoogrupos.com.br: Acrescenta também nas ferramentas, o SQLTools muito utilizada por desenvolvedores e analistas. Em Quinta-feira, 28 de Maio de 2015 13:40, Rafael Mendonca raffaell.t...@yahoo.com [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Outra coisa que reparei na sua trigger, é que você utiliza UPPER(OWNER) comparando com os nomes dos usuários em minúsculo: 'cbarbosa' entre outros... Ou seja, o usuário que entrar com cbarbosa, oracle, administrador irá passar pela trigger após a correção do seu problema. Em Quinta-feira, 28 de Maio de 2015 12:34, 'Schiavini' et...@schiavini.inf.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Boa tarde Qual é o resultado de: alter trigger TG_LOGON_AUDIT_TRIGGER compile; Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quinta-feira, 28 de maio de 2015 11:50 To: Lista de Usuários Oracle; Grupo OraOracle; Oracle in Brazil Subject: [oracle_br] Trigger de logon... Bom dia! Caros amigos, em pesquisa na net, também com sugestões recebidas de alguns amigos, compilei a seguinte trigger abaixo, apesar de não apresentar erros na compilação, quando tento acessar com o usuário cbarbosa é mostrado o ERRO descrito ao final da trigger: Gostaria da ajuda dos amigos que possuem maior experiência com oracle para a identificação do erro e sua solução. Obrigado... DROP TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD; CREATE OR REPLACE TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE v_prog SYS.v_$session.program%TYPE; v_module SYS.v_$session.module%TYPE; -- Parametro acrescentado para evitar programa renomeado. owner SYS.v_$session.username%TYPE; v_osuser SYS.v_$session.osuser%TYPE; BEGIN SELECT program, module, username, osuser INTO v_prog, v_module, owner, v_osuser FROM sys.v_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- Não verificar conexões SYS AND ROWNUM = 1; -- Processos paralelos terá o mesmo do AUDSID IF UPPER (owner) NOT IN ('cbarbosa', 'oracle', 'administrador', 'IUSR_ISSEC', 'APACHE', 'OEM', 'OEM22', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'TSMSYS', 'WKPROXY', 'WKSYS', 'WMSYS', 'XDB', 'SYS', 'DBSNMP', 'SYSMAN', 'SYSTEM') THEN IF UPPER (v_prog) LIKE '%TOAD%' -- Toad OR UPPER (v_module) LIKE '%TOAD%' -- Toad OR UPPER (v_prog) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_module) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_prog) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_module) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_prog) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%SQL%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL%' -- SQL Developer OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_prog) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_module) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_prog) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_module) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_prog) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_module) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_prog) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_module) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_prog) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_module) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_prog) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_module) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_prog) LIKE '%RAPTOR%' -- Oracle Raptor OR UPPER (v_module) LIKE '%RAPTOR%' -- Oracle Raptor THEN RAISE_APPLICATION_ERROR ( -2, 'A Ferramenta de desenvolvimento ' || v_module || ' não é permitida na PRODUÇÃO! (' || v_osuser || ' - ' || owner || ' - ' || v_prog || ' - ' || v_module -- Parametro acrescentado. || ')'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / = ERRO == # -- Erro apresentado quando da tentativa de conexao com usuario (cbarbosa) # Ocorreu um erro ao executar a operação solicitada: ORA-04098: gatilho 'SYS.TG_LOGON_AUDIT_TRIGGER' é inválido e a revalidação falhou 04098. 0 - trigger
Re: [oracle_br] Trigger de logon...
Rafael / Cristiano Mas se o desenvolvedor/analista for um pouco mais safo, basta renomear o executável para burlar isso. [ ]'s André 2015-05-28 16:24 GMT-03:00 Rafael Mendonca raffaell.t...@yahoo.com [oracle_br] oracle_br@yahoogrupos.com.br: Acrescenta também nas ferramentas, o SQLTools muito utilizada por desenvolvedores e analistas. Em Quinta-feira, 28 de Maio de 2015 13:40, Rafael Mendonca raffaell.t...@yahoo.com [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Outra coisa que reparei na sua trigger, é que você utiliza UPPER(OWNER) comparando com os nomes dos usuários em minúsculo: 'cbarbosa' entre outros... Ou seja, o usuário que entrar com cbarbosa, oracle, administrador irá passar pela trigger após a correção do seu problema. Em Quinta-feira, 28 de Maio de 2015 12:34, 'Schiavini' et...@schiavini.inf.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Boa tarde Qual é o resultado de: alter trigger TG_LOGON_AUDIT_TRIGGER compile; Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quinta-feira, 28 de maio de 2015 11:50 To: Lista de Usuários Oracle; Grupo OraOracle; Oracle in Brazil Subject: [oracle_br] Trigger de logon... Bom dia! Caros amigos, em pesquisa na net, também com sugestões recebidas de alguns amigos, compilei a seguinte trigger abaixo, apesar de não apresentar erros na compilação, quando tento acessar com o usuário cbarbosa é mostrado o ERRO descrito ao final da trigger: Gostaria da ajuda dos amigos que possuem maior experiência com oracle para a identificação do erro e sua solução. Obrigado... DROP TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD; CREATE OR REPLACE TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE v_prog SYS.v_$session.program%TYPE; v_module SYS.v_$session.module%TYPE; -- Parametro acrescentado para evitar programa renomeado. owner SYS.v_$session.username%TYPE; v_osuser SYS.v_$session.osuser%TYPE; BEGIN SELECT program, module, username, osuser INTO v_prog, v_module, owner, v_osuser FROM sys.v_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- Não verificar conexões SYS AND ROWNUM = 1; -- Processos paralelos terá o mesmo do AUDSID IF UPPER (owner) NOT IN ('cbarbosa', 'oracle', 'administrador', 'IUSR_ISSEC', 'APACHE', 'OEM', 'OEM22', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'TSMSYS', 'WKPROXY', 'WKSYS', 'WMSYS', 'XDB', 'SYS', 'DBSNMP', 'SYSMAN', 'SYSTEM') THEN IF UPPER (v_prog) LIKE '%TOAD%' -- Toad OR UPPER (v_module) LIKE '%TOAD%' -- Toad OR UPPER (v_prog) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_module) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_prog) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_module) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_prog) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%SQL%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL%' -- SQL Developer OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_prog) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_module) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_prog) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_module) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_prog) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_module) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_prog) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_module) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_prog) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_module) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_prog) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_module) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_prog) LIKE '%RAPTOR%' -- Oracle Raptor OR UPPER (v_module) LIKE '%RAPTOR%' -- Oracle Raptor THEN RAISE_APPLICATION_ERROR ( -2, 'A Ferramenta de desenvolvimento ' || v_module || ' não é permitida na PRODUÇÃO! (' || v_osuser || ' - ' || owner || ' - ' || v_prog || ' - ' || v_module -- Parametro acrescentado. || ')'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / = ERRO == # -- Erro apresentado quando da tentativa de conexao com usuario (cbarbosa) # Ocorreu um erro ao executar a operação solicitada: ORA-04098: gatilho 'SYS.TG_LOGON_AUDIT_TRIGGER' é inválido e a revalidação falhou 04098. 0 - trigger '%s.%s' is invalid and failed re-validation *Cause: A trigger was attempted to be retrieved for execution and was found to be invalid. This also means that compilation/authorization failed for the trigger. *Action: Options are to resolve
Re: [oracle_br] Trigger de logon...
Acrescenta também nas ferramentas, o SQLTools muito utilizada por desenvolvedores e analistas. Em Quinta-feira, 28 de Maio de 2015 13:40, Rafael Mendonca raffaell.t...@yahoo.com [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Outra coisa que reparei na sua trigger, é que você utiliza UPPER(OWNER) comparando com os nomes dos usuários em minúsculo: 'cbarbosa' entre outros... Ou seja, o usuário que entrar com cbarbosa, oracle, administrador irá passar pela trigger após a correção do seu problema. Em Quinta-feira, 28 de Maio de 2015 12:34, 'Schiavini' et...@schiavini.inf.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Boa tarde Qual é o resultado de: alter trigger TG_LOGON_AUDIT_TRIGGER compile; Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quinta-feira, 28 de maio de 2015 11:50 To: Lista de Usuários Oracle; Grupo OraOracle; Oracle in Brazil Subject: [oracle_br] Trigger de logon... Bom dia! Caros amigos, em pesquisa na net, também com sugestões recebidas de alguns amigos, compilei a seguinte trigger abaixo, apesar de não apresentar erros na compilação, quando tento acessar com o usuário cbarbosa é mostrado o ERRO descrito ao final da trigger: Gostaria da ajuda dos amigos que possuem maior experiência com oracle para a identificação do erro e sua solução. Obrigado... DROP TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD; CREATE OR REPLACE TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE v_prog SYS.v_$session.program%TYPE; v_module SYS.v_$session.module%TYPE; -- Parametro acrescentado para evitar programa renomeado. owner SYS.v_$session.username%TYPE; v_osuser SYS.v_$session.osuser%TYPE; BEGIN SELECT program, module, username, osuser INTO v_prog, v_module, owner, v_osuser FROM sys.v_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- Não verificar conexões SYS AND ROWNUM = 1; -- Processos paralelos terá o mesmo do AUDSID IF UPPER (owner) NOT IN ('cbarbosa', 'oracle', 'administrador', 'IUSR_ISSEC', 'APACHE', 'OEM', 'OEM22', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'TSMSYS', 'WKPROXY', 'WKSYS', 'WMSYS', 'XDB', 'SYS', 'DBSNMP', 'SYSMAN', 'SYSTEM') THEN IF UPPER (v_prog) LIKE '%TOAD%' -- Toad OR UPPER (v_module) LIKE '%TOAD%' -- Toad OR UPPER (v_prog) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_module) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_prog) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_module) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_prog) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%SQL%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL%' -- SQL Developer OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_prog) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_module) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_prog) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_module) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_prog) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_module) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_prog) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_module) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_prog) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_module) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_prog) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_module) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_prog) LIKE '%RAPTOR%' -- Oracle Raptor OR UPPER (v_module) LIKE '%RAPTOR%' -- Oracle Raptor THEN RAISE_APPLICATION_ERROR ( -2, 'A Ferramenta de desenvolvimento ' || v_module || ' não é permitida na PRODUÇÃO! (' || v_osuser || ' - ' || owner || ' - ' || v_prog || ' - ' || v_module -- Parametro acrescentado. || ')'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / = ERRO == # -- Erro apresentado quando da tentativa de conexao com usuario (cbarbosa) # Ocorreu um erro ao executar a operação solicitada: ORA-04098: gatilho 'SYS.TG_LOGON_AUDIT_TRIGGER' é inválido e a revalidação falhou 04098. 0 - trigger '%s.%s' is invalid and failed re-validation *Cause: A trigger was attempted to be retrieved for execution and was found to be invalid. This also means that compilation/authorization failed for the trigger. *Action: Options are to resolve the compilation/authorization errors, disable the trigger, or drop the trigger. Código de fornecedor 4098 = ATT == # -- A TRIGGER NÃO APRESENTA ERROS DE COMPILAÇÃO SELECT LINE, POSITION, REPLACE (TEXT, CHR (10), ' '), attribute FROM SYS.ALL_ERRORS A WHERE A.NAME = 'TG_BLOCK_TOOLS_FROM_PROD
Re: [oracle_br] Trigger de logon...
Yep : provavelmente, como eu disse numa msg anterior, o DBA teria um JOB de banco que roda a cada um ou dois minutos, varre a V$SESSION e mata as sessões (ou envia email, se matar é muito radical) cujo nome de programa não seja o talequal da aplicação, ou que o IP é o do web server/servidor de aplicação, ou sei lá que info seria usada para identificar que a sessão se originou da app... []s Chiappa
[oracle_br] Trigger de logon...
Bom dia! Caros amigos, em pesquisa na net, também com sugestões recebidas de alguns amigos, compilei a seguinte trigger abaixo, apesar de não apresentar erros na compilação, quando tento acessar com o usuário cbarbosa é mostrado o ERRO descrito ao final da trigger: Gostaria da ajuda dos amigos que possuem maior experiência com oracle para a identificação do erro e sua solução. Obrigado... DROP TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD; CREATE OR REPLACE TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE v_prog SYS.v_$session.program%TYPE; v_module SYS.v_$session.module%TYPE; -- Parametro acrescentado para evitar programa renomeado. owner SYS.v_$session.username%TYPE; v_osuser SYS.v_$session.osuser%TYPE; BEGIN SELECT program, module, username, osuser INTO v_prog, v_module, owner, v_osuser FROM sys.v_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- Não verificar conexões SYS AND ROWNUM = 1; -- Processos paralelos terá o mesmo do AUDSID IF UPPER (owner) NOT IN ('cbarbosa', 'oracle', 'administrador', 'IUSR_ISSEC', 'APACHE', 'OEM', 'OEM22', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'TSMSYS', 'WKPROXY', 'WKSYS', 'WMSYS', 'XDB', 'SYS', 'DBSNMP', 'SYSMAN', 'SYSTEM') THEN IFUPPER (v_prog) LIKE '%TOAD%' -- Toad OR UPPER (v_module) LIKE '%TOAD%' -- Toad OR UPPER (v_prog) LIKE '%T.O.A.D%'-- Toad OR UPPER (v_module) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_prog) LIKE '%SQLNAV%'-- SQL Navigator OR UPPER (v_module) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_prog) LIKE '%PLSQLDEV%'-- PLSQL Developer OR UPPER (v_module) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%PL/SQL Developer%'-- PLSQL Developer OR UPPER (v_module) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%SQL%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL%' -- SQL Developer OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_prog) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_module) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_prog) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_module) LIKE '%EXCEL%'-- MS-Excel plug-in OR UPPER (v_prog) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_module) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_prog) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_module) LIKE '%DEVELOPER%'-- Oracle SQL Developer OR UPPER (v_prog) LIKE '%IFBLD%'-- Oracle Forms Developer Builder OR UPPER (v_module) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_prog) LIKE '%RWBUILDER%'-- Oracle Reports Builder OR UPPER (v_module) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_prog) LIKE '%RAPTOR%'-- Oracle Raptor OR UPPER (v_module) LIKE '%RAPTOR%' -- Oracle Raptor THEN RAISE_APPLICATION_ERROR ( -2, 'A Ferramenta de desenvolvimento ' || v_module || ' não é permitida na PRODUÇÃO! (' || v_osuser || ' - ' || owner || ' - ' || v_prog || ' - ' || v_module -- Parametro acrescentado. || ')'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / = ERRO == # -- Erro apresentado quando da tentativa de conexao com usuario (cbarbosa) # Ocorreu um erro ao executar a operação solicitada: ORA-04098: gatilho 'SYS.TG_LOGON_AUDIT_TRIGGER' é inválido e a revalidação falhou 04098. 0 - trigger '%s.%s' is invalid and failed re-validation *Cause:A trigger was attempted to be retrieved for execution and was found to be invalid. This also means that compilation/authorization
Re: [oracle_br] Trigger de logon...
Outra coisa que reparei na sua trigger, é que você utiliza UPPER(OWNER) comparando com os nomes dos usuários em minúsculo: 'cbarbosa' entre outros... Ou seja, o usuário que entrar com cbarbosa, oracle, administrador irá passar pela trigger após a correção do seu problema. Em Quinta-feira, 28 de Maio de 2015 12:34, 'Schiavini' et...@schiavini.inf.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Boa tarde Qual é o resultado de: alter trigger TG_LOGON_AUDIT_TRIGGER compile; Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quinta-feira, 28 de maio de 2015 11:50 To: Lista de Usuários Oracle; Grupo OraOracle; Oracle in Brazil Subject: [oracle_br] Trigger de logon... Bom dia! Caros amigos, em pesquisa na net, também com sugestões recebidas de alguns amigos, compilei a seguinte trigger abaixo, apesar de não apresentar erros na compilação, quando tento acessar com o usuário cbarbosa é mostrado o ERRO descrito ao final da trigger: Gostaria da ajuda dos amigos que possuem maior experiência com oracle para a identificação do erro e sua solução. Obrigado... DROP TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD; CREATE OR REPLACE TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE v_prog SYS.v_$session.program%TYPE; v_module SYS.v_$session.module%TYPE; -- Parametro acrescentado para evitar programa renomeado. owner SYS.v_$session.username%TYPE; v_osuser SYS.v_$session.osuser%TYPE; BEGIN SELECT program, module, username, osuser INTO v_prog, v_module, owner, v_osuser FROM sys.v_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- Não verificar conexões SYS AND ROWNUM = 1; -- Processos paralelos terá o mesmo do AUDSID IF UPPER (owner) NOT IN ('cbarbosa', 'oracle', 'administrador', 'IUSR_ISSEC', 'APACHE', 'OEM', 'OEM22', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'TSMSYS', 'WKPROXY', 'WKSYS', 'WMSYS', 'XDB', 'SYS', 'DBSNMP', 'SYSMAN', 'SYSTEM') THEN IF UPPER (v_prog) LIKE '%TOAD%' -- Toad OR UPPER (v_module) LIKE '%TOAD%' -- Toad OR UPPER (v_prog) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_module) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_prog) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_module) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_prog) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_module) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%SQL%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL%' -- SQL Developer OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_prog) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_module) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_prog) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_module) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_prog) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_module) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_prog) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_module) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_prog) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_module) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_prog) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_module) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_prog) LIKE '%RAPTOR%' -- Oracle Raptor OR UPPER (v_module) LIKE '%RAPTOR%' -- Oracle Raptor THEN RAISE_APPLICATION_ERROR ( -2, 'A Ferramenta de desenvolvimento ' || v_module || ' não é permitida na PRODUÇÃO! (' || v_osuser || ' - ' || owner || ' - ' || v_prog || ' - ' || v_module -- Parametro acrescentado. || ')'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / = ERRO == # -- Erro apresentado quando da tentativa de conexao com usuario (cbarbosa) # Ocorreu um erro ao executar a operação solicitada: ORA-04098: gatilho 'SYS.TG_LOGON_AUDIT_TRIGGER' é inválido e a revalidação falhou 04098. 0 - trigger '%s.%s' is invalid and failed re-validation *Cause: A trigger was attempted to be retrieved for execution and was found to be invalid. This also means that compilation/authorization failed for the trigger. *Action: Options are to resolve the compilation/authorization errors, disable the trigger, or drop the trigger. Código de fornecedor 4098 = ATT == # -- A TRIGGER NÃO APRESENTA ERROS DE COMPILAÇÃO SELECT LINE, POSITION, REPLACE (TEXT, CHR (10), ' '), attribute FROM SYS.ALL_ERRORS A WHERE A.NAME = 'TG_BLOCK_TOOLS_FROM_PROD' AND A.TYPE = 'TRIGGER' AND A.OWNER = 'SYS' ORDER BY ATTRIBUTE, LINE, POSITION; Time Start: 28/05/2015 10:07:29 no rows selected. (SEM ERROS DE COMPILACAO...) Time End: 28/05/2015 10:07:30 Elapsed Time for Script Execution: 514 msecs Atenciosamente
RE: [oracle_br] Trigger de logon...
Boa tarde Qual é o resultado de: alter trigger TG_LOGON_AUDIT_TRIGGER compile; Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: quinta-feira, 28 de maio de 2015 11:50 To: Lista de Usuários Oracle; Grupo OraOracle; Oracle in Brazil Subject: [oracle_br] Trigger de logon... Bom dia! Caros amigos, em pesquisa na net, também com sugestões recebidas de alguns amigos, compilei a seguinte trigger abaixo, apesar de não apresentar erros na compilação, quando tento acessar com o usuário cbarbosa é mostrado o ERRO descrito ao final da trigger: Gostaria da ajuda dos amigos que possuem maior experiência com oracle para a identificação do erro e sua solução. Obrigado... DROP TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD; CREATE OR REPLACE TRIGGER SYS.TG_BLOCK_TOOLS_FROM_PROD AFTER LOGON ON DATABASE DECLARE v_prog SYS.v_$session.program%TYPE; v_module SYS.v_$session.module%TYPE; -- Parametro acrescentado para evitar programa renomeado. owner SYS.v_$session.username%TYPE; v_osuser SYS.v_$session.osuser%TYPE; BEGIN SELECT program, module, username, osuser INTO v_prog, v_module, owner, v_osuser FROM sys.v_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- Não verificar conexões SYS AND ROWNUM = 1; -- Processos paralelos terá o mesmo do AUDSID IF UPPER (owner) NOT IN ('cbarbosa', 'oracle', 'administrador', 'IUSR_ISSEC', 'APACHE', 'OEM', 'OEM22', 'SCOTT', 'SI_INFORMTN_SCHEMA', 'TSMSYS', 'WKPROXY', 'WKSYS', 'WMSYS', 'XDB', 'SYS', 'DBSNMP', 'SYSMAN', 'SYSTEM') THEN IFUPPER (v_prog) LIKE '%TOAD%' -- Toad OR UPPER (v_module) LIKE '%TOAD%' -- Toad OR UPPER (v_prog) LIKE '%T.O.A.D%'-- Toad OR UPPER (v_module) LIKE '%T.O.A.D%' -- Toad OR UPPER (v_prog) LIKE '%SQLNAV%'-- SQL Navigator OR UPPER (v_module) LIKE '%SQLNAV%' -- SQL Navigator OR UPPER (v_prog) LIKE '%PLSQLDEV%'-- PLSQL Developer OR UPPER (v_module) LIKE '%PLSQLDEV%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%PL/SQL Developer%'-- PLSQL Developer OR UPPER (v_module) LIKE '%PL/SQL Developer%' -- PLSQL Developer OR UPPER (v_prog) LIKE '%SQL%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL%' -- SQL Developer OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_module) LIKE '%SQL Developer%' -- SQL Developer OR UPPER (v_prog) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_module) LIKE '%BUSOBJ%' -- Business Objects OR UPPER (v_prog) LIKE '%EXCEL%' -- MS-Excel plug-in OR UPPER (v_module) LIKE '%EXCEL%'-- MS-Excel plug-in OR UPPER (v_prog) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_module) LIKE '%SQLPLUS%' -- SQLPLUS OR UPPER (v_prog) LIKE '%DEVELOPER%' -- Oracle SQL Developer OR UPPER (v_module) LIKE '%DEVELOPER%'-- Oracle SQL Developer OR UPPER (v_prog) LIKE '%IFBLD%'-- Oracle Forms Developer Builder OR UPPER (v_module) LIKE '%IFBLD%' -- Oracle Forms Developer Builder OR UPPER (v_prog) LIKE '%RWBUILDER%'-- Oracle Reports Builder OR UPPER (v_module) LIKE '%RWBUILDER%' -- Oracle Reports Builder OR UPPER (v_prog) LIKE '%RAPTOR%'-- Oracle Raptor OR UPPER (v_module) LIKE '%RAPTOR%' -- Oracle Raptor THEN RAISE_APPLICATION_ERROR ( -2, 'A Ferramenta de desenvolvimento ' || v_module || ' não é permitida na PRODUÇÃO! (' || v_osuser || ' - ' || owner || ' - ' || v_prog || ' - ' || v_module -- Parametro acrescentado. || ')'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / = ERRO
[oracle_br] Trigger de Logon.
Boa tarde! Meu oracle é: banner full_version version_bit ARQUIVAMENTO - -- - Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 10.2.0.3.0 10.2.0.3.0 - 64bi STARTED Caros amigos, estou precisando de uma trigger de logon que: A) permita acesso ao banco apenas do sistema web desenvolvido; B) permita acesso ao banco apenas dos form´s e report´s; C) que boqueie programas de desenvolvimento tais como: '%TOAD%'-- Toad; '%T.O.A.D%'-- Toad; '%SQLNAV%'-- SQL Navigator; '%PLSQLDEV%'-- PLSQL Developer; '%BUSOBJ%'-- Business Objects; '%EXCEL%'-- MS-Excel plug-in; '%SQLPLUS%'-- SQLPLUS; '%DEVELOPER%'-- Oracle SQL Developer; '%IFBLD%'-- Oracle Forms Developer Builder; '%RWBUILDER%'-- Oracle Reports Builder; '%RAPTOR%' entre outros; D) que permita acesso aos programas acima relacionados na alínea 'C' apenas para os usuários relacionados, ou ainda, máquinas relacionadas (IP´s). Caso alguns dos amigos possuam uma trigger do tipo ou mais estruturada ainda, caso possam ajudar-me, ficaria bastante grato. Tenho que implementar esta rotina na minha plataforma, já pesquisei algumas trigger´s de logon mas nenhuma que fosse completa ou que se adequasse ao meu cenário, assim, gostaria da ajuda dos amigos os quais possuem uma maior experiência com a administração do Oracle. Obrigado... Atenciosamente, [image: Foto Cristiano Vasconcelos Barbosa] *Cristiano Vasconcelos Barbosa.'.* * Analista de Sistemas Banco de Dados* | Cel: +55 (85) 9691.8331 -- http://br.linkedin.com/in/cristianovasconcelos *DEUS MEUMQUE JUS*.'. *DÓMINI SUMUS*.'. Contact me: [image: Google Talk] cvasconcel...@gmail.com [image: Skype] cvasconcelosb [image: MSN] cvasconcel...@hotmail.com [image: Y! Messenger] cvasconcel...@yahoo.com.br [image: My QR VCard] http://s.wisestamp.com/links?url=http%3A%2F%2Fbr.linkedin.com%2Fin%2Fcristianovasconcelossn=Y3Zhc2NvbmNlbG9zYkBnbWFpbC5jb20%3D
[oracle_br] Trigger para Fechamento Diário
Prezados, Bom Dia, Estou desenvolvendo um sistema em Delphi6 com Oracle 11g. Neste sistema existe uma funcionalidade que fica calculando o desempenho diário do processo de trabalho dos operadores para ser exibido em um painel. Os calculos e as consultas estão funcionando todas corretamente, porém existe uma função que faz o fechamento do saldo diário das notas fiscais e que é para ser executado à meia noite. O problema é que para este procecimento ser executado o módulo do painel informativo tem que estar rodando e o cliente desliga o computador todo dia à noite e torna-o a ligar pela manhã, porém ele faz isso após o início das atividades, o que faz com que os valores obtidos sejam diferentes dos que realmente deveriam ser. A minha pergunta é : É possível fazer uma trigger no banco de dados que se autoexecute à meia noite ( ou outro horário a ser definido ) sem a necessidade de iniciar alguma operação no banco pelo sistema? Antecipadamente agradeço Samuca
Re: [oracle_br] Trigger para Fechamento Diário
Agende um job para rodar a meia noite. Sent from my LG NEXUS 5 Att,/Regards, Vitor Jr. Infraestrutura / Infrastructure Team Oracle 11g DBA Certified Professional - OCP Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid Infrastructure Administrator - OCE Oracle Database 11g Performance Tuning Certified Expert - OCE Oracle Exadata 11g Certified Implementation Specialist Oracle Certified Associate, MySQL 5 mail, gtalk e msn: vitorj...@gmail.com http://certificacaobd.com.br/ skype: vjunior1981 https://mybizcard.co/vitor.jr.385628 Em 24/09/2014 08:58, samuel.calleg...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Prezados, Bom Dia, Estou desenvolvendo um sistema em Delphi6 com Oracle 11g. Neste sistema existe uma funcionalidade que fica calculando o desempenho diário do processo de trabalho dos operadores para ser exibido em um painel. Os calculos e as consultas estão funcionando todas corretamente, porém existe uma função que faz o fechamento do saldo diário das notas fiscais e que é para ser executado à meia noite. O problema é que para este procecimento ser executado o módulo do painel informativo tem que estar rodando e o cliente desliga o computador todo dia à noite e torna-o a ligar pela manhã, porém ele faz isso após o início das atividades, o que faz com que os valores obtidos sejam diferentes dos que realmente deveriam ser. A minha pergunta é : É possível fazer uma trigger no banco de dados que se autoexecute à meia noite ( ou outro horário a ser definido ) sem a necessidade de iniciar alguma operação no banco pelo sistema? Antecipadamente agradeço Samuca
[oracle_br] TRIGGER SIMPRES
Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
RES: [oracle_br] TRIGGER SIMPRES
Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:33 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
Re: [oracle_br] TRIGGER SIMPRES
Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:33 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
RES: [oracle_br] TRIGGER SIMPRES
Drop a trigger e crie novamente. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:46 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:33 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
Re: [oracle_br] TRIGGER SIMPRES
Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:46 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:33 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
RES: [oracle_br] TRIGGER SIMPRES
Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:59 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:46 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:33 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
Re: [oracle_br] TRIGGER SIMPRES
O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:59 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:46 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:33 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
Re: [oracle_br] TRIGGER SIMPRES
mesmo :new.descricao2 := 'teste'; dá o mesmo erro... Em 15 de agosto de 2014 14:08, Eduardo Perdomo panc...@gmail.com escreveu: O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:59 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:46 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:33 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
RES: [oracle_br] TRIGGER SIMPRES
Isso não teria problema.. Me passe o código da trigger ... De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 14:08 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:59 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:46 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:33 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
Re: [oracle_br] TRIGGER SIMPRES
CREATE OR REPLACE TRIGGER PCPRODUT_IGUALACAMPO before insert or update ON pcPRODUT FOR EACH ROW BEGIN :new.descricao7 := 'teste'; END; simples assim dá o erro 14:29:36 ORA-04098: trigger 'LOCAL.PCPRODUT_IGUALA_CAMPO' is invalid and failed re-validation Em 15 de agosto de 2014 14:23, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Isso não teria problema.. Me passe o código da trigger ... *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 14:08 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:59 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:46 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:33 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
RE: [oracle_br] TRIGGER SIMPRES
Eduardo, a trigger que esta gerando o erro é a PCPRODUT_IGUALA_CAMPO e a que vc esta alterando é a PCPRODUT_IGUALACAMPO. From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Sent: sexta-feira, 15 de agosto de 2014 14:35 To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] TRIGGER SIMPRES CREATE OR REPLACE TRIGGER PCPRODUT_IGUALACAMPO before insert or update ON pcPRODUT FOR EACH ROW BEGIN :new.descricao7 := 'teste'; END; simples assim dá o erro 14:29:36 ORA-04098: trigger 'LOCAL.PCPRODUT_IGUALA_CAMPO' is invalid and failed re-validation Em 15 de agosto de 2014 14:23, 'Alisson Luz' alisson...@yahoo.com.brmailto:alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br escreveu: Isso não teria problema.. Me passe o código da trigger ... De: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 14:08 Para: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.brmailto:alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? De: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:59 Para: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.brmailto:alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. De: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:46 Para: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.brmailto:alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. De: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:33 Para: oracle_br@yahoogrupos.com.brmailto:oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.brhttp://www.grupopc.com.br (21) 6845-8592 panc...@gmail.commailto:panc...@gmail.com eduardo.perd...@pcinformatica.com.brmailto:eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.brhttp://eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.brhttp://www.grupopc.com.br (21) 6845-8592 panc...@gmail.commailto:panc...@gmail.com eduardo.perd...@pcinformatica.com.brmailto:eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.brhttp://eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.brhttp://www.grupopc.com.br (21) 6845-8592 panc...@gmail.commailto:panc...@gmail.com eduardo.perd...@pcinformatica.com.brmailto:eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.brhttp://eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.brhttp://www.grupopc.com.br (21) 6845-8592 panc...@gmail.commailto:panc...@gmail.com eduardo.perd...@pcinformatica.com.brmailto:eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.brhttp://eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.brhttp://www.grupopc.com.br (21) 6845-8592 panc...@gmail.commailto:panc...@gmail.com eduardo.perd...@pcinformatica.com.brmailto:eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.brhttp://eduardo.perdomo.nom.br
RES: [oracle_br] TRIGGER SIMPRES
create table ADL ( descricao VARCHAR2(40), descricao2 VARCHAR2(45) ); CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO before insert or update ON adl FOR EACH ROW BEGIN :new.DESCRICAO2 := :new.DESCRICAO; END; insert into adl values ('teste','adl'); commit; select * from adl Fiz um exemplo no base de teste e o processo De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 14:35 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES CREATE OR REPLACE TRIGGER PCPRODUT_IGUALACAMPO before insert or update ON pcPRODUT FOR EACH ROW BEGIN :new.descricao7 := 'teste'; END; simples assim dá o erro 14:29:36 ORA-04098: trigger 'LOCAL.PCPRODUT_IGUALA_CAMPO' is invalid and failed re-validation Em 15 de agosto de 2014 14:23, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Isso não teria problema.. Me passe o código da trigger ... De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 14:08 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:59 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:46 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Enviada em: sexta-feira, 15 de agosto de 2014 13:33 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
Re: [oracle_br] TRIGGER SIMPRES
O Sérgio matou a charada e o exemplo do Allison estava certo. Obrigado à todos... Em 15 de agosto de 2014 14:42, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: create table ADL ( descricao VARCHAR2(40), descricao2 VARCHAR2(45) ); CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO before insert or update ON adl FOR EACH ROW BEGIN :new.DESCRICAO2 := :new.DESCRICAO; END; insert into adl values ('teste','adl'); commit; select * from adl Fiz um exemplo no base de teste e o processo *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 14:35 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES CREATE OR REPLACE TRIGGER PCPRODUT_IGUALACAMPO before insert or update ON pcPRODUT FOR EACH ROW BEGIN :new.descricao7 := 'teste'; END; simples assim dá o erro 14:29:36 ORA-04098: trigger 'LOCAL.PCPRODUT_IGUALA_CAMPO' is invalid and failed re-validation Em 15 de agosto de 2014 14:23, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Isso não teria problema.. Me passe o código da trigger ... *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 14:08 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES O descricao é varchar 40 e o descricao2 é varchar 45... :-( Em 15 de agosto de 2014 14:01, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Eduardo, O erro é ao editar um registro ? Se sim os campos DESCRICAO2 é igual ao campo DESCRICAO ? Seguindo a mesma estrutura ? como tamanhos e tipos ? *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:59 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Continua mesmo erro mesmo dropando.. Em 15 de agosto de 2014 13:50, 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br escreveu: Drop a trigger e crie novamente. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:46 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* Re: [oracle_br] TRIGGER SIMPRES Obrigado por responder, mas parece que compila sem erros mas dá erro abaixo ao editar a descricao e tentar salvar : 13:42:10 ORA-04098: trigger 'LOCAL.PRODUTO_IGUALACAMPO' is invalid and failed re-validation 2014-08-15 13:36 GMT-03:00 'Alisson Luz' alisson...@yahoo.com.br [oracle_br] oracle_br@yahoogrupos.com.br: Olá boa tarde.. :new. DESCRICAO2 := :new. DESCRICAO; No lugar do update. *De:* oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] *Enviada em:* sexta-feira, 15 de agosto de 2014 13:33 *Para:* oracle_br@yahoogrupos.com.br *Assunto:* [oracle_br] TRIGGER SIMPRES Boa tarde. O que está errado nessa trigger simples para igualar dois campos : CREATE OR REPLACE TRIGGER PRODUTO_IGUALACAMPO after insert or update ON PRODUTO FOR EACH ROW BEGIN UPDATE PRODUTO set DESCRICAO2 = DESCRICAO; END; -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br -- Eduardo Perdomo Consultor de Implantação Grupo PC Sistemas - www.grupopc.com.br (21) 6845-8592 panc...@gmail.com eduardo.perd...@pcinformatica.com.br Blog: eduardo.perdomo.nom.br
[oracle_br] Trigger para prevenir (e logar!) tentativas de DDL
Bom dia pessoal. Comecei a desenvolver, mas vai que alguém já tem pronto pra compartilhar... :) Devido a uma necessidade do cliente, preciso desenvolver uma trigger que bloqueie qualquer comando DDL dentro de um schema. Ex.: - Usuário conecta como SCOTT; - Ao tentar executar um DDL em um objeto, essa trigger irá disparar, impedindo a conclusão do comando e logando a tentativa em uma tabela; - A maneira de se executar um DDL seria como sys/system ou então desabilitando a trigger. Alguém com algo pronto ou parecido? Abraços! :) Att,/Regards, Vitor Jr. Infraestrutura / Infrastructure Team Oracle 11g DBA Certified Professional - OCP Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid Infrastructure Administrator - OCE Oracle Database 11g Performance Tuning Certified Expert - OCE Oracle Exadata 11g Certified Implementation Specialist Oracle Certified Associate, MySQL 5 mail, gtalk e msn: mailto:vitorj...@gmail.com vitorj...@gmail.com http://certificacaobd.com.br/ http://certificacaobd.com.br/ skype: vjunior1981 [As partes desta mensagem que não continham texto foram removidas]
RE: [oracle_br] Trigger para prevenir (e logar!) tentativas de DDL
Bom dia create or replace trigger before_ddl before ddl on schema begin raise_application_error( -20001, 'Mensagem de erro' ); end; Étore From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] On Behalf Of Vitor Jr. Sent: segunda-feira, 13 de maio de 2013 09:28 To: oracle_br@yahoogrupos.com.br Subject: [oracle_br] Trigger para prevenir (e logar!) tentativas de DDL Bom dia pessoal. Comecei a desenvolver, mas vai que alguém já tem pronto pra compartilhar... :) Devido a uma necessidade do cliente, preciso desenvolver uma trigger que bloqueie qualquer comando DDL dentro de um schema. Ex.: - Usuário conecta como SCOTT; - Ao tentar executar um DDL em um objeto, essa trigger irá disparar, impedindo a conclusão do comando e logando a tentativa em uma tabela; - A maneira de se executar um DDL seria como sys/system ou então desabilitando a trigger. Alguém com algo pronto ou parecido? Abraços! :) Att,/Regards, Vitor Jr. Infraestrutura / Infrastructure Team Oracle 11g DBA Certified Professional - OCP Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid Infrastructure Administrator - OCE Oracle Database 11g Performance Tuning Certified Expert - OCE Oracle Exadata 11g Certified Implementation Specialist Oracle Certified Associate, MySQL 5 mail, gtalk e msn: mailto:vitorj...@gmail.com mailto:vitorjr81%40gmail.com vitorj...@gmail.com mailto:vitorjr81%40gmail.com http://certificacaobd.com.br/ http://certificacaobd.com.br/ skype: vjunior1981 [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger com problemas
Pessoal boa tarde! Estou com um problema incomum aqui na empresa. A trigger abaixo deveria realizar um insert simples na tabela FLP_HISTORICO. O problema é que a trigger esta inserindo apenas parte dos valores passados no insert. Os demais dados não são inseridos mesmo contendo valores nos campos. O mais curioso, é que se eu executar os inserts manualmente com os mesmos dados, o insert é realizado com sucesso. Alguem tem idéia do que pode ser? Dados inseridos corretamente: *:NEW.COD_FUNCIONARIO, :NEW.DAT_LANC, 204* Dados não inseridos: *:NEW.VLR_DOCUMENTO, 'MANAGER', :NEW.DAT_LANC, 'FC'* Trigger: *create or replace* *TRIGGER GLOBUS.TR_FLP_FICHACONDUTA_ARR_BH* *AFTER INSERT ON T_ARR_LANC_FUNC * *FOR EACH ROW WHEN (NEW.cod_empresa in (1,2,3))* * * *BEGIN* *INSERT INTO FLP_HISTORICO (codintfunc, dthist, codocorr, nrdoctohist, usuincluiu, dtincluiu, origem) * *VALUES (:NEW.COD_FUNCIONARIO, :NEW.DAT_LANC, 204, :NEW.VLR_DOCUMENTO, 'MANAGER', :NEW.DAT_LANC, 'FC');* END; -- Att, Rafael HM Pereira Linux User Id: 360166 Skype: rafaelhmpereira MSN: rafael.henri...@gmail.com Blog: http://rafaelhmpereira.blogspot.com LinkedIn: http://br.linkedin.com/in/rafaelhmpereira (27) 9233-0734 / (27) 3328-4320 [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger com problemas
Fala Rafael. Não tem alguma outra trigger nesta mesma tabela que esteja limpando estes campos não? Tivemos um problema semelhante, em que o processo fazia o insert na tabela, que disparava a trigger, e depois fazia um update no registro inserido, para sinalizar que tinha concluído a operação, neste momento uma trigger de update limpava os campos. Então, parecia ser um único momento, mas na verdade eram 2 triggers uma anulando a outra. Dá uma conferida nisso Abraços! Gerson S. de Vasconcelos Júnior DBA - Oracle Certified Fone: (16) 8176-0468 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 30 de abril de 2013 14:40, Rafael HM Pereira rafael.henri...@gmail.comescreveu: ** Pessoal boa tarde! Estou com um problema incomum aqui na empresa. A trigger abaixo deveria realizar um insert simples na tabela FLP_HISTORICO. O problema é que a trigger esta inserindo apenas parte dos valores passados no insert. Os demais dados não são inseridos mesmo contendo valores nos campos. O mais curioso, é que se eu executar os inserts manualmente com os mesmos dados, o insert é realizado com sucesso. Alguem tem idéia do que pode ser? Dados inseridos corretamente: *:NEW.COD_FUNCIONARIO, :NEW.DAT_LANC, 204* Dados não inseridos: *:NEW.VLR_DOCUMENTO, 'MANAGER', :NEW.DAT_LANC, 'FC'* Trigger: *create or replace* *TRIGGER GLOBUS.TR_FLP_FICHACONDUTA_ARR_BH* *AFTER INSERT ON T_ARR_LANC_FUNC * *FOR EACH ROW WHEN (NEW.cod_empresa in (1,2,3))* * * *BEGIN* * INSERT INTO FLP_HISTORICO (codintfunc, dthist, codocorr, nrdoctohist, usuincluiu, dtincluiu, origem) * * VALUES (:NEW.COD_FUNCIONARIO, :NEW.DAT_LANC, 204, :NEW.VLR_DOCUMENTO, 'MANAGER', :NEW.DAT_LANC, 'FC');* END; -- Att, Rafael HM Pereira Linux User Id: 360166 Skype: rafaelhmpereira MSN: rafael.henri...@gmail.com Blog: http://rafaelhmpereira.blogspot.com LinkedIn: http://br.linkedin.com/in/rafaelhmpereira (27) 9233-0734 / (27) 3328-4320 [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger utilizando exception
Boa tarde! Suas perguntas já estão todas respondidas por você mesmo... rs Está tudo correto o que vc falou. Faça um SELECT INTO para pegar o valor do salário do gerente do sujeito e armazenar numa variável. Depois compare o valor do salário do sujeito com a variável... Se for maior, vc dispara a exceção. 2012/9/18 Antony Ferreira tonyferrei...@gmail.com ** Boa tarde pessoal, Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. Tenho a seguinte trigger: CREATE OR REPLACE TRIGGER imp_novos_emp BEFORE INSERT OR UPDATE ON employees FOR EACH ROW BEGIN IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN IF :NEW.salary 15000 THEN RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este valor'); END IF; END IF; END imp_novos_emp; / Qual seria a melhor maneira para eu poder impedir que seja inserido um novo empregado que tenha o salario maior que o gerente. Eu teria que fazer uma consulta na coluna manager_id da tabela employees e verificar se o salario do empregado que eu estou add é maior que o do gerente? Outra duvida, posso colocar uma excessão para mostrar que o salario é invalido quando o salario do empregado que eu estou add é maior que o do gerente? [As partes desta mensagem que não continham texto foram removidas] -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger utilizando exception
A select eu teria que fazer dentro do primeiro IF ou antes do IF, como estou começando a pegar os esquemas do PLSQL agora, tem coisas que eu fico na duvida um pouco. Em 18 de setembro de 2012 17:52, Milton Bastos Henriquis Jr. miltonbas...@gmail.com escreveu: Boa tarde! Suas perguntas já estão todas respondidas por você mesmo... rs Está tudo correto o que vc falou. Faça um SELECT INTO para pegar o valor do salário do gerente do sujeito e armazenar numa variável. Depois compare o valor do salário do sujeito com a variável... Se for maior, vc dispara a exceção. 2012/9/18 Antony Ferreira tonyferrei...@gmail.com ** Boa tarde pessoal, Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. Tenho a seguinte trigger: CREATE OR REPLACE TRIGGER imp_novos_emp BEFORE INSERT OR UPDATE ON employees FOR EACH ROW BEGIN IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN IF :NEW.salary 15000 THEN RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este valor'); END IF; END IF; END imp_novos_emp; / Qual seria a melhor maneira para eu poder impedir que seja inserido um novo empregado que tenha o salario maior que o gerente. Eu teria que fazer uma consulta na coluna manager_id da tabela employees e verificar se o salario do empregado que eu estou add é maior que o do gerente? Outra duvida, posso colocar uma excessão para mostrar que o salario é invalido quando o salario do empregado que eu estou add é maior que o do gerente? [As partes desta mensagem que não continham texto foram removidas] -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger utilizando exception
Bom, lógica de programação é algo muito simples! Vc tem que saber o que exatamente vc quer que o teu código faça... Vc criou ali um IF (não sei se foi vc que fez ou se vc copiou o código) pra testar se o cara é presidente ou vp, pois se for, daí vc não testa o salário do cara... então não faz sentido vc fazer o select FORA do primeiro if, senão vc poderá estar executando um select a toa. Então é melhor vc executar dentro do primeiro IF. 2012/9/18 Antony Ferreira tonyferrei...@gmail.com ** A select eu teria que fazer dentro do primeiro IF ou antes do IF, como estou começando a pegar os esquemas do PLSQL agora, tem coisas que eu fico na duvida um pouco. Em 18 de setembro de 2012 17:52, Milton Bastos Henriquis Jr. miltonbas...@gmail.com escreveu: Boa tarde! Suas perguntas já estão todas respondidas por você mesmo... rs Está tudo correto o que vc falou. Faça um SELECT INTO para pegar o valor do salário do gerente do sujeito e armazenar numa variável. Depois compare o valor do salário do sujeito com a variável... Se for maior, vc dispara a exceção. 2012/9/18 Antony Ferreira tonyferrei...@gmail.com ** Boa tarde pessoal, Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. Tenho a seguinte trigger: CREATE OR REPLACE TRIGGER imp_novos_emp BEFORE INSERT OR UPDATE ON employees FOR EACH ROW BEGIN IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN IF :NEW.salary 15000 THEN RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este valor'); END IF; END IF; END imp_novos_emp; / Qual seria a melhor maneira para eu poder impedir que seja inserido um novo empregado que tenha o salario maior que o gerente. Eu teria que fazer uma consulta na coluna manager_id da tabela employees e verificar se o salario do empregado que eu estou add é maior que o do gerente? Outra duvida, posso colocar uma excessão para mostrar que o salario é invalido quando o salario do empregado que eu estou add é maior que o do gerente? [As partes desta mensagem que não continham texto foram removidas] -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger utilizando exception
Blz, vou fazer as alterações e testar aqui pra ver como que vai funcionar. Vlw mto obrigado pelas dicas. Em 18 de setembro de 2012 18:07, Milton Bastos Henriquis Jr. miltonbas...@gmail.com escreveu: Bom, lógica de programação é algo muito simples! Vc tem que saber o que exatamente vc quer que o teu código faça... Vc criou ali um IF (não sei se foi vc que fez ou se vc copiou o código) pra testar se o cara é presidente ou vp, pois se for, daí vc não testa o salário do cara... então não faz sentido vc fazer o select FORA do primeiro if, senão vc poderá estar executando um select a toa. Então é melhor vc executar dentro do primeiro IF. 2012/9/18 Antony Ferreira tonyferrei...@gmail.com ** A select eu teria que fazer dentro do primeiro IF ou antes do IF, como estou começando a pegar os esquemas do PLSQL agora, tem coisas que eu fico na duvida um pouco. Em 18 de setembro de 2012 17:52, Milton Bastos Henriquis Jr. miltonbas...@gmail.com escreveu: Boa tarde! Suas perguntas já estão todas respondidas por você mesmo... rs Está tudo correto o que vc falou. Faça um SELECT INTO para pegar o valor do salário do gerente do sujeito e armazenar numa variável. Depois compare o valor do salário do sujeito com a variável... Se for maior, vc dispara a exceção. 2012/9/18 Antony Ferreira tonyferrei...@gmail.com ** Boa tarde pessoal, Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. Tenho a seguinte trigger: CREATE OR REPLACE TRIGGER imp_novos_emp BEFORE INSERT OR UPDATE ON employees FOR EACH ROW BEGIN IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN IF :NEW.salary 15000 THEN RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este valor'); END IF; END IF; END imp_novos_emp; / Qual seria a melhor maneira para eu poder impedir que seja inserido um novo empregado que tenha o salario maior que o gerente. Eu teria que fazer uma consulta na coluna manager_id da tabela employees e verificar se o salario do empregado que eu estou add é maior que o do gerente? Outra duvida, posso colocar uma excessão para mostrar que o salario é invalido quando o salario do empregado que eu estou add é maior que o do gerente? [As partes desta mensagem que não continham texto foram removidas] -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger verificar update de única colunas
Milton, Acho que minha explicação não ficou muito clara, mesmo. Na verdade, o que eu gostaria é o inverso: se estiver atualizando *somente* a coluna observação (as demais não foram modificadas), então não precisa disparar a trigger. Mas, se estiver atualizando qualquer outra coluna, aí sim tem que disparar a trigger. On Aug 31, 2012, at 12:00 PM, Milton Bastos Henriquis Jr. miltonbas...@gmail.com wrote: Seria isso? CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATE OF campo_1, campo_2 ON nome_da_sua_tabela FOR EACH ROW BEGIN 2012/8/31 JLSilva jljlsi...@yahoo.com.br ** Pessoal, bom dia. Oracle10gR2 10.2.0.5.0 Enterprise Edition em Linux RHEL 5.6. Gostaria de verificar se alguém conhece algum método para verificar em uma trigger se somente uma coluna está sendo modificada. Ou seja, a tabela tem N colunas. Atualmente, eu estou verificando todas as colunas para saber se alguma foi modificada. O problema é que se uma nova coluna for adicionada na tabela, a trigger precisará ser modificada para verificar essa coluna também. Somente 1 coluna pode ser modificada, que é uma coluna de observações. Obrigado. JLSilva. -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos
Re: [oracle_br] Trigger verificar update de única colunas
Me perdoe JL, eu é que não li com a devida atenção! Depois que li o e-mail do Chiappa, daí reli o seu e-mail e percebi que vc queria o contrário! rs... Eu realmente não saberia resolver o seu problema de forma completa! Pois eu colocaria campo por campo lá na trigger... e a cada campo adicionado eu teria que modificar a trigger. Portanto realmente não tenho a solução ideal pra vc! 2012/8/31 JLSilva jljlsi...@yahoo.com.br ** Milton, Acho que minha explicação não ficou muito clara, mesmo. Na verdade, o que eu gostaria é o inverso: se estiver atualizando *somente* a coluna observação (as demais não foram modificadas), então não precisa disparar a trigger. Mas, se estiver atualizando qualquer outra coluna, aí sim tem que disparar a trigger. On Aug 31, 2012, at 12:00 PM, Milton Bastos Henriquis Jr. miltonbas...@gmail.com wrote: Seria isso? CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATE OF campo_1, campo_2 ON nome_da_sua_tabela FOR EACH ROW BEGIN 2012/8/31 JLSilva jljlsi...@yahoo.com.br ** Pessoal, bom dia. Oracle10gR2 10.2.0.5.0 Enterprise Edition em Linux RHEL 5.6. Gostaria de verificar se alguém conhece algum método para verificar em uma trigger se somente uma coluna está sendo modificada. Ou seja, a tabela tem N colunas. Atualmente, eu estou verificando todas as colunas para saber se alguma foi modificada. O problema é que se uma nova coluna for adicionada na tabela, a trigger precisará ser modificada para verificar essa coluna também. Somente 1 coluna pode ser modificada, que é uma coluna de observações. Obrigado. JLSilva. -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger verificar update de única colunas
Poizé, Milton, acredito que a solução ideal seja essa mesma: testar cada coluna e ajustar a trigger sempre que adicionar uma coluna nova. Enviei para o grupo para verificar se alguém conheceria alguma funcionalidade de se escrever isso de forma diferente, que fosse mais automática. Obrigado. JLSilva On Aug 31, 2012, at 3:49 PM, Milton Bastos Henriquis Jr. miltonbas...@gmail.com wrote: Me perdoe JL, eu é que não li com a devida atenção! Depois que li o e-mail do Chiappa, daí reli o seu e-mail e percebi que vc queria o contrário! rs... Eu realmente não saberia resolver o seu problema de forma completa! Pois eu colocaria campo por campo lá na trigger... e a cada campo adicionado eu teria que modificar a trigger. Portanto realmente não tenho a solução ideal pra vc! 2012/8/31 JLSilva jljlsi...@yahoo.com.br ** Milton, Acho que minha explicação não ficou muito clara, mesmo. Na verdade, o que eu gostaria é o inverso: se estiver atualizando *somente* a coluna observação (as demais não foram modificadas), então não precisa disparar a trigger. Mas, se estiver atualizando qualquer outra coluna, aí sim tem que disparar a trigger. On Aug 31, 2012, at 12:00 PM, Milton Bastos Henriquis Jr. miltonbas...@gmail.com wrote: Seria isso? CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATE OF campo_1, campo_2 ON nome_da_sua_tabela FOR EACH ROW BEGIN 2012/8/31 JLSilva jljlsi...@yahoo.com.br ** Pessoal, bom dia. Oracle10gR2 10.2.0.5.0 Enterprise Edition em Linux RHEL 5.6. Gostaria de verificar se alguém conhece algum método para verificar em uma trigger se somente uma coluna está sendo modificada. Ou seja, a tabela tem N colunas. Atualmente, eu estou verificando todas as colunas para saber se alguma foi modificada. O problema é que se uma nova coluna for adicionada na tabela, a trigger precisará ser modificada para verificar essa coluna também. Somente 1 coluna pode ser modificada, que é uma coluna de observações. Obrigado. JLSilva. -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos
RE: [oracle_br] Trigger verificar update de única colunas
Aí fica simples, basta testar se a observação não foi alterada. Se não tiver sido, alguma outra coluna foi. E podem se acrescidas colunas a vontade na tabela a posteriori. create trigger trigger before update on tabela for each row begin if :new.observacao = :old.observacao then raise end if; end; CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATEON nome_da_sua_tabela FOR EACH ROW BEGIN From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] On Behalf Of JLSilva Sent: Friday, August 31, 2012 3:42 PM To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Trigger verificar update de única colunas Milton, Acho que minha explicação não ficou muito clara, mesmo. Na verdade, o que eu gostaria é o inverso: se estiver atualizando *somente* a coluna observação (as demais não foram modificadas), então não precisa disparar a trigger. Mas, se estiver atualizando qualquer outra coluna, aí sim tem que disparar a trigger. On Aug 31, 2012, at 12:00 PM, Milton Bastos Henriquis Jr. miltonbas...@gmail.com mailto:miltonbastos%40gmail.com wrote: Seria isso? CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATE OF campo_1, campo_2 ON nome_da_sua_tabela FOR EACH ROW BEGIN 2012/8/31 JLSilva jljlsi...@yahoo.com.br mailto:jljlsilva%40yahoo.com.br ** Pessoal, bom dia. Oracle10gR2 10.2.0.5.0 Enterprise Edition em Linux RHEL 5.6. Gostaria de verificar se alguém conhece algum método para verificar em uma trigger se somente uma coluna está sendo modificada. Ou seja, a tabela tem N colunas. Atualmente, eu estou verificando todas as colunas para saber se alguma foi modificada. O problema é que se uma nova coluna for adicionada na tabela, a trigger precisará ser modificada para verificar essa coluna também. Somente 1 coluna pode ser modificada, que é uma coluna de observações. Obrigado. JLSilva. -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger verificar update de única colunas
Olá, JLChiappa. O banco é um Oracle10gR2 10.2.0.5.0 Enterprise Edition. Ótima explicação sobre a funcionalidade de permissão por coluna. Realmente, algo que dificilmente nos lembramos que existe e acabamos por não usar. (e eventualmente fazemos algo *Asnino*, mesmo) Mas, novamente (como eu disse para o Milton), acredito que por eu ter dado poucos detalhes sobre a situação, esta não é a solução para o caso aqui. Existe uma lógica para permitir ou não um update nas demais colunas. Inclusive, com queries em tabelas relacionadas, flags, datas etc. etc. É algo relativamente complexo, que diz respeito às regras do negócio da empresa. Daí a necessidade de se escrever uma trigger. Obrigado. JoseLino Silva. On Aug 31, 2012, at 12:59 PM, J. Laurindo Chiappa jlchia...@yahoo.com.br wrote: Boa tarde, xará JL (sou JL também, de José Laurindo)... Antes de responder um comentário : a não ser que a sua versão de banco seja velhíssima e/ou limitada e não tenha o recurso, OU que haja alguma regra de negócio que impeça, (vc não confirma nem nega isso) imho é ** Asnino **, ignorância da grossa, tudo de Ruim mesmo se usar trigger (E portanto sofrer com performance, sofrer com as atualizações de código como vc mesmo disse, sofrer com os efeitos colaterais do trigger, etc) para simular algo que JÁ EXISTE dar privilégio de colunas : isso já existe há Muuuiiito tempo - não lembro se isso veio no 9i ou no 10g, mas o ponto é que já existe, veja o exemplo abaixo no final do e-mail num 10gR2 EE Caso Realmente por qquer motivo sério e intransponível vc não possa usar o recurso, aí a resposta é : afaik não, não há num trigger PL/SQL como saber se apenas uma dada coluna foi updateada, ou de se obter a lista de colunas updateadas, nem nada do tipo, é mesmo fazer o que vc já deve estar fazendo, imagino, que é : IFupdating('C1') or updating('C2') or updating('C3') ... THEN raise_application_error(-codigodoerro, 'Só pode updatear coluna OBS!!'); END IF; ... = O que vc Pode fazer é Automatizar a alteração do código da trigger quando alguém fazer ALTER TABLE xxx ADD COLUMN ; uma opção pra isso (se possível no seu caso) é vc Remover o direito de ALTER TABLE da pessoa, escrever uma Procedure que faz a alteração E já altera o trigger , e dar pra pessoa apenas o direito de Executar a procedure. Outra opção pode ser vc CAPTURAR os comandos de DDL com trigger de DDL, e se o texto do comando é ALTER TABLE nnn ADD COLUMN aí a trigger de DDL dispara um job que altera a trigger , coisa assim... = Mas toda essa resposta está girando em cima de quebra-galhos e POGs, o Correto e Profissional é usar o recurso do database nativo ... Segue o exemplo : SYSTEM@O10GR2::SQLcreate table TAB_ALTER_OBS (c1 number, c2 varchar2(40), obs varchar2(2000)); Tabela criada. = priv de select, normal ... SYSTEM@O10GR2::SQLgrant select on TAB_ALTER_OBS to scott; Concess?o bem-sucedida. = o pulo do gato, priv apenas na Coluna ... SYSTEM@O10GR2::SQLgrant update (OBS) on TAB_ALTER_OBS to scott; Concess?o bem-sucedida. = uma massinha de dados : SYSTEM@O10GR2::SQLinsert into TAB_ALTER_OBS (c1,c2) values(1, 'Linha 1'); 1 linha criada. SYSTEM@O10GR2::SQLinsert into TAB_ALTER_OBS (c1,c2) values(2, 'Linha 2'); 1 linha criada. SYSTEM@O10GR2::SQLcommit; Commit concluido. SYSTEM@O10GR2::SQLgrant create synonym to scott; Concess?o bem-sucedida. SYSTEM@O10GR2::SQLconn scott/tiger Conectado. SCOTT@O10GR2::SQLcreate synonym TAB_ALTER_OBS for SYSTEM.TAB_ALTER_OBS; Sinonimo criado. = o SELECT vai ok ... SCOTT@O10GR2::SQLselect * from TAB_ALTER_OBS; C1 C2 -- OBS -- -- -- -- -- --- 1 Linha 1 2 Linha 2 = UPDATE só na coluna permitida, OK... SCOTT@O10GR2::SQLupdate TAB_ALTER_OBS set OBS='Li a linha 1' where c1=1; 1 linha atualizada. SCOTT@O10GR2::SQLcommit; Commit concluido. = UPDATE numa coluna
Re: [oracle_br] Trigger verificar update de única colunas
Etore, Essa foi uma ótima solução! Simples e eficaz! Existe uma ótima lógica: se foi recebido um update, logo algo foi alterado. Apesar de que não obrigatoriamente, pois poderia ter alterado para o mesmo valor.. Mas, não teria sentido alterar algo para o mesmo valor. E se foi alterado para o mesmo valor, seria algo desnecessário. Vou validar com a equipe se isso pode ser implementado. Não sei se a aplicação faz algo desse tipo (atualizar a coluna para o mesmo valor). Digo isto porque já vi aplicações que, devido à linguagem de programação utilizada, framework etc., o update sempre é feito sobre todas as colunas da tabela, mesmo para aquelas que não foram modificadas. On Aug 31, 2012, at 5:21 PM, Schiavini et...@schiavini.inf.br wrote: Aí fica simples, basta testar se a observação não foi alterada. Se não tiver sido, alguma outra coluna foi. E podem se acrescidas colunas a vontade na tabela a posteriori. create trigger trigger before update on tabela for each row begin if :new.observacao = :old.observacao then raise … end if; end; CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATEON nome_da_sua_tabela FOR EACH ROW BEGIN From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] On Behalf Of JLSilva Sent: Friday, August 31, 2012 3:42 PM To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Trigger verificar update de única colunas Milton, Acho que minha explicação não ficou muito clara, mesmo. Na verdade, o que eu gostaria é o inverso: se estiver atualizando *somente* a coluna observação (as demais não foram modificadas), então não precisa disparar a trigger. Mas, se estiver atualizando qualquer outra coluna, aí sim tem que disparar a trigger. On Aug 31, 2012, at 12:00 PM, Milton Bastos Henriquis Jr. miltonbas...@gmail.com mailto:miltonbastos%40gmail.com wrote: Seria isso? CREATE TRIGGER Nome_da_sua_triggerAFTER (ou BEFORE) UPDATE OF campo_1, campo_2 ON nome_da_sua_tabela FOR EACH ROW BEGIN 2012/8/31 JLSilva jljlsi...@yahoo.com.br mailto:jljlsilva%40yahoo.com.br ** Pessoal, bom dia. Oracle10gR2 10.2.0.5.0 Enterprise Edition em Linux RHEL 5.6. Gostaria de verificar se alguém conhece algum método para verificar em uma trigger se somente uma coluna está sendo modificada. Ou seja, a tabela tem N colunas. Atualmente, eu estou verificando todas as colunas para saber se alguma foi modificada. O problema é que se uma nova coluna for adicionada na tabela, a trigger precisará ser modificada para verificar essa coluna também. Somente 1 coluna pode ser modificada, que é uma coluna de observações. Obrigado. JLSilva. -- Att, [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br
Re: [oracle_br] Trigger para registrar tentativa de login
Capin, obrigado pela resposta, mas a ideia é outra. Imagine que: 1. um usuário tente conectar muitas vezes com senha incorreta: quero registrar isto (osuser, username, máquina etc.). 2. um usuário inexistente tenta conectar no banco: quero registrar isto (osuser, username - mesmo sendo inexistente, máquina etc.). A trigger desse link nào serve para o meu objetivo. Para entender melhor: preciso fazer algo semelhante à auditoria do enterprise edition (audit session whenever not successful), mas no Oracle Standard Edition. Valeu. On Nov 29, 2011, at 14:20 , Fernando Franquini 'capin' wrote: Aqui tem um exemplo de alterar sessao com a trigger de logon. http://franquini.wordpress.com/2011/07/19/trigger-de-logon/ Somente modificar para anteder a sua necessidade. Att, capin 2011/11/29 JLSilva jljlsi...@yahoo.com.br Pessoal, alguém teria uma trigger que consiga registrar o nome do usuário quando ocorre falha no login? As funções ora_login_user e sys_context('USERENV','SESSION_USER') não registram nenhum valor quando ocorre erro de login (trigger AFTER SERVERERROR ON DATABASE). Consegui registrar todas as demais informações (osuser, machine, ipaddress), exceto o nome do usuário. Obrigado. Oracle11gR2 11.2.0.2.0 Standard Edition. -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos -- Fernando Franquini - Capin Bacharel em Ciencias da Computacao - UFSC Analista de Sistemas e de Banco de Dados / DBA Contatos: fernando.franqu...@gmail.com / 48.9902.4047 Florianópolis - SC - Brasil http://franquini.wordpress.com/ http://franquini.wordpress.com/ http://br.linkedin.com/in/capin [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos
Re: [oracle_br] Trigger para registrar tentativa de login
Boa tarde JLSilva, Experimenta SYS_CONTEXT ('USERENV', 'CURRENT_USER'). []s Marcos Em 29 de novembro de 2011 13:47, JLSilva jljlsi...@yahoo.com.br escreveu: ** Pessoal, alguém teria uma trigger que consiga registrar o nome do usuário quando ocorre falha no login? As funções ora_login_user e sys_context('USERENV','SESSION_USER') não registram nenhum valor quando ocorre erro de login (trigger AFTER SERVERERROR ON DATABASE). Consegui registrar todas as demais informações (osuser, machine, ipaddress), exceto o nome do usuário. Obrigado. Oracle11gR2 11.2.0.2.0 Standard Edition. [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger para registrar tentativa de login
Engraçado cara, eu fiz exatamente isso e trouxe o usuário da conexão... Talvez seja porquê a minha trigger está no usuário SYS. Experimenta criá-la para o usuário SYS. Em 29 de novembro de 2011 15:40, JLSilva jljlsi...@yahoo.com.br escreveu: ** Marcos, é por aí, mas o sys_context('USERENV','CURRENT_USER') retornou o usuário proprietário da trigger. Precisaria de uma função que retornasse o usuário informado no login. Valeu! On Nov 29, 2011, at 15:33 , Marcos de Moura Gonçalves wrote: Boa tarde JLSilva, Experimenta SYS_CONTEXT ('USERENV', 'CURRENT_USER'). []s Marcos Em 29 de novembro de 2011 13:47, JLSilva jljlsi...@yahoo.com.br escreveu: ** Pessoal, alguém teria uma trigger que consiga registrar o nome do usuário quando ocorre falha no login? As funções ora_login_user e sys_context('USERENV','SESSION_USER') não registram nenhum valor quando ocorre erro de login (trigger AFTER SERVERERROR ON DATABASE). Consegui registrar todas as demais informações (osuser, machine, ipaddress), exceto o nome do usuário. Obrigado. Oracle11gR2 11.2.0.2.0 Standard Edition. [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger para registrar tentativa de login
Ah, entendi. Você deve estar fazendo uma trigger de login, comum. Veja meu processo e veja se é isto que você está fazendo: connect / as sysdba drop table log_falha_logon_tt purge; create table log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER')SESSION_USER, --sys_context('USERENV','SESSION_USER')SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAMEDATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST')HOST, sys_context('USERENV','TERMINAL')TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL')NETWORK_PROTOCOL from dual where 1=2; create or replace trigger tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USER format a15 column SESSION_USERID format a15 column AUTHENTICATION_TYPE format a15 column DATABASE_NAME format a15 column INSTANCE_NUM format 999 column SERVER_ERROR format 99 column IP_ADDRESS format a15 column HOST format a35 column TERMINAL format a15 column OS_USER format a15 column NETWORK_PROTOCOL format a15 select * from log_falha_logon_tt order by hora_ocorr; On Nov 29, 2011, at 15:43 , Marcos de Moura Gonçalves wrote: Engraçado cara, eu fiz exatamente isso e trouxe o usuário da conexão... Talvez seja porquê a minha trigger está no usuário SYS. Experimenta criá-la para o usuário SYS. Em 29 de novembro de 2011 15:40, JLSilva jljlsi...@yahoo.com.br escreveu: ** Marcos, é por aí, mas o sys_context('USERENV','CURRENT_USER') retornou o usuário proprietário da trigger. Precisaria de uma função que retornasse o usuário informado no login. Valeu! On Nov 29, 2011, at 15:33 , Marcos de Moura Gonçalves wrote: Boa tarde JLSilva, Experimenta SYS_CONTEXT ('USERENV', 'CURRENT_USER'). []s Marcos Em 29 de novembro de 2011 13:47, JLSilva jljlsi...@yahoo.com.br escreveu: ** Pessoal, alguém teria uma trigger que consiga registrar o nome do usuário quando ocorre falha no login? As funções ora_login_user e sys_context('USERENV','SESSION_USER') não registram nenhum valor quando ocorre erro de login (trigger AFTER SERVERERROR ON DATABASE). Consegui registrar todas as demais informações (osuser, machine, ipaddress), exceto o nome do usuário. Obrigado. Oracle11gR2 11.2.0.2.0 Standard Edition. [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE:
Re: [oracle_br] Trigger para registrar tentativa de login
Cara, a minha trigger é muito parecida com a sua, o mesmo conceito. Fiz essa trigger a um tempo já, e lembro que li alguma coisa sobre a diferença entre essa trigger estar ou não no usuário SYS. O motivo, honestamente, não lembro, mas lembro que minha tabela de log ficava dentro do meu schema, mas a trigger eu criei dentro do schema sys. Experimenta dropar a sua trigger e recompilá-la, igualzinha, apenas especificando: create or replace trigger SYS.tr_falha_logon_tt Em 29 de novembro de 2011 15:49, JLSilva jljlsi...@yahoo.com.br escreveu: ** Ah, entendi. Você deve estar fazendo uma trigger de login, comum. Veja meu processo e veja se é isto que você está fazendo: connect / as sysdba drop table log_falha_logon_tt purge; create table log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAME DATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST') HOST, sys_context('USERENV','TERMINAL') TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL from dual where 1=2; create or replace trigger tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USER format a15 column SESSION_USERID format a15 column AUTHENTICATION_TYPE format a15 column DATABASE_NAME format a15 column INSTANCE_NUM format 999 column SERVER_ERROR format 99 column IP_ADDRESS format a15 column HOST format a35 column TERMINAL format a15 column OS_USER format a15 column NETWORK_PROTOCOL format a15 select * from log_falha_logon_tt order by hora_ocorr; On Nov 29, 2011, at 15:43 , Marcos de Moura Gonçalves wrote: Engraçado cara, eu fiz exatamente isso e trouxe o usuário da conexão... Talvez seja porquê a minha trigger está no usuário SYS. Experimenta criá-la para o usuário SYS. Em 29 de novembro de 2011 15:40, JLSilva jljlsi...@yahoo.com.br escreveu: ** Marcos, é por aí, mas o sys_context('USERENV','CURRENT_USER') retornou o usuário proprietário da trigger. Precisaria de uma função que retornasse o usuário informado no login. Valeu! On Nov 29, 2011, at 15:33 , Marcos de Moura Gonçalves wrote: Boa tarde JLSilva, Experimenta SYS_CONTEXT ('USERENV', 'CURRENT_USER'). []s Marcos Em 29 de novembro de 2011 13:47, JLSilva jljlsi...@yahoo.com.br escreveu: ** Pessoal, alguém teria uma trigger que consiga registrar o nome do usuário quando ocorre falha no login? As funções ora_login_user e sys_context('USERENV','SESSION_USER') não registram nenhum valor quando ocorre erro de login (trigger AFTER SERVERERROR ON DATABASE). Consegui registrar todas as demais informações (osuser, machine, ipaddress), exceto o nome do usuário. Obrigado. Oracle11gR2 11.2.0.2.0 Standard Edition. [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse:
Re: [oracle_br] Trigger para registrar tentativa de login
Olha, não entendo qual seria a diferença. A trigger e a tabela já está no schema SYS. De qualquer forma, executei este procedimento, mas o resultado foi exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o SESSION_USER retorna nulo, independente de existir ou não no banco o usuário informado no login. Se tiver mais alguma dica, agradeço! connect / as sysdba create user jlsilva identified by jlsilva quota unlimited on users; grant create session, create table to jlsilva; drop table jlsilva.log_falha_logon_tt purge; create table jlsilva.log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER')SESSION_USER, --sys_context('USERENV','SESSION_USER')SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAMEDATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST')HOST, sys_context('USERENV','TERMINAL')TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL')NETWORK_PROTOCOL from dual where 1=2; create or replace trigger sys.tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into jlsilva.log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USERformat a15 column SESSION_USERID format a15 column AUTHENTICATION_TYPE format a15 column DATABASE_NAME format a15 column INSTANCE_NUMformat 999 column SERVER_ERRORformat 99 column IP_ADDRESS format a15 column HOSTformat a35 column TERMINALformat a15 column OS_USER format a15 column NETWORK_PROTOCOLformat a15 select * from jlsilva.log_falha_logon_tt order by hora_ocorr; On Nov 29, 2011, at 15:55 , Marcos de Moura Gonçalves wrote: Cara, a minha trigger é muito parecida com a sua, o mesmo conceito. Fiz essa trigger a um tempo já, e lembro que li alguma coisa sobre a diferença entre essa trigger estar ou não no usuário SYS. O motivo, honestamente, não lembro, mas lembro que minha tabela de log ficava dentro do meu schema, mas a trigger eu criei dentro do schema sys. Experimenta dropar a sua trigger e recompilá-la, igualzinha, apenas especificando: create or replace trigger SYS.tr_falha_logon_tt Em 29 de novembro de 2011 15:49, JLSilva jljlsi...@yahoo.com.br escreveu: ** Ah, entendi. Você deve estar fazendo uma trigger de login, comum. Veja meu processo e veja se é isto que você está fazendo: connect / as sysdba drop table log_falha_logon_tt purge; create table log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAME DATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST') HOST, sys_context('USERENV','TERMINAL') TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL from dual where 1=2; create or replace trigger tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate,
Re: [oracle_br] Trigger para registrar tentativa de login
Realmente, não percebi que no seu script vc se conecta como /. Eu vi o create trigger sem especificar o owner e achei que ficava em um outro owner. Não sei se ajuda, mas segue o código do trigger e tabela q eu fiz na época: CREATE TABLE marcos.erro_logon (dt_erro DATE DEFAULT SYSDATE ,txt_oracle_user VARCHAR2(30) ,txt_ip VARCHAR2(15) ,txt_maquina VARCHAR2(50) ,txt_os_user VARCHAR2(50) ,txt_software VARCHAR2(50) ,txt_tipo_autenticacao VARCHAR2(50) ,txt_erro VARCHAR2(100)) / CREATE OR REPLACE TRIGGER SYS.trg_as_erro_logon AFTER SERVERERROR ON DATABASE BEGIN IF ( is_servererror (1004) OR is_servererror (1005) OR is_servererror (1017) OR is_servererror (1035) OR is_servererror (1045) ) THEN INSERT INTO marcos.erro_logon (txt_oracle_user, txt_ip, txt_maquina, txt_os_user, txt_software, txt_tipo_autenticacao, txt_erro ) VALUES (SYS_CONTEXT ('USERENV', 'CURRENT_USER'), SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), SYS_CONTEXT ('USERENV', 'HOST'), SYS_CONTEXT ('USERENV', 'OS_USER'), SYS_CONTEXT ('USERENV', 'MODULE'), SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE'), DBMS_UTILITY.format_error_stack ); COMMIT; END IF; END trg_as_erro_logon; / Erros logados: 1004: ORA-01004: default username feature not supported; logon denied 1005: ORA-01005: null password given; logon denied 1017: ORA-01017: invalid username/password; logon denied 1035: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 1045: ORA-01045: user ... lacks CREATE SESSION privilege; logon denied []s Marcos Em 29 de novembro de 2011 16:08, JLSilva jljlsi...@yahoo.com.br escreveu: ** Olha, não entendo qual seria a diferença. A trigger e a tabela já está no schema SYS. De qualquer forma, executei este procedimento, mas o resultado foi exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o SESSION_USER retorna nulo, independente de existir ou não no banco o usuário informado no login. Se tiver mais alguma dica, agradeço! connect / as sysdba create user jlsilva identified by jlsilva quota unlimited on users; grant create session, create table to jlsilva; drop table jlsilva.log_falha_logon_tt purge; create table jlsilva.log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAME DATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST') HOST, sys_context('USERENV','TERMINAL') TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL from dual where 1=2; create or replace trigger sys.tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into jlsilva.log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USER format a15 column SESSION_USERID format a15 column AUTHENTICATION_TYPE format a15 column DATABASE_NAME format a15 column INSTANCE_NUM format 999 column SERVER_ERROR format 99 column IP_ADDRESS format a15 column HOST format a35 column TERMINAL format a15 column OS_USER format a15 column NETWORK_PROTOCOL format a15 select * from jlsilva.log_falha_logon_tt order by hora_ocorr; On Nov 29, 2011, at 15:55 , Marcos de Moura Gonçalves wrote: Cara, a minha trigger é muito parecida com a sua, o mesmo conceito. Fiz essa trigger a um tempo já, e lembro que li alguma coisa sobre a diferença entre essa trigger estar ou não no usuário SYS. O motivo, honestamente, não lembro, mas lembro que minha tabela de log ficava dentro do meu schema, mas a trigger eu criei dentro do schema sys. Experimenta dropar a sua trigger e recompilá-la, igualzinha, apenas especificando: create or
Re: [oracle_br] Trigger para registrar tentativa de login
Um outro detalhe: eu reparei no seu script que vc ainda está conectado como SYS quando tenta fazer connect abc123/abc123. Pode ser esse o motivo de estar gravando SYS na tabela de log. Experimenta abrir outro putty e fazer sqlplus abc123/abc123 pra ver o q grava. Em 29 de novembro de 2011 16:12, Marcos de Moura Gonçalves mgmar...@gmail.com escreveu: Realmente, não percebi que no seu script vc se conecta como /. Eu vi o create trigger sem especificar o owner e achei que ficava em um outro owner. Não sei se ajuda, mas segue o código do trigger e tabela q eu fiz na época: CREATE TABLE marcos.erro_logon (dt_erro DATE DEFAULT SYSDATE ,txt_oracle_user VARCHAR2(30) ,txt_ip VARCHAR2(15) ,txt_maquina VARCHAR2(50) ,txt_os_user VARCHAR2(50) ,txt_software VARCHAR2(50) ,txt_tipo_autenticacao VARCHAR2(50) ,txt_erro VARCHAR2(100)) / CREATE OR REPLACE TRIGGER SYS.trg_as_erro_logon AFTER SERVERERROR ON DATABASE BEGIN IF ( is_servererror (1004) OR is_servererror (1005) OR is_servererror (1017) OR is_servererror (1035) OR is_servererror (1045) ) THEN INSERT INTO marcos.erro_logon (txt_oracle_user, txt_ip, txt_maquina, txt_os_user, txt_software, txt_tipo_autenticacao, txt_erro ) VALUES (SYS_CONTEXT ('USERENV', 'CURRENT_USER'), SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), SYS_CONTEXT ('USERENV', 'HOST'), SYS_CONTEXT ('USERENV', 'OS_USER'), SYS_CONTEXT ('USERENV', 'MODULE'), SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE'), DBMS_UTILITY.format_error_stack ); COMMIT; END IF; END trg_as_erro_logon; / Erros logados: 1004: ORA-01004: default username feature not supported; logon denied 1005: ORA-01005: null password given; logon denied 1017: ORA-01017: invalid username/password; logon denied 1035: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 1045: ORA-01045: user ... lacks CREATE SESSION privilege; logon denied []s Marcos Em 29 de novembro de 2011 16:08, JLSilva jljlsi...@yahoo.com.brescreveu: ** Olha, não entendo qual seria a diferença. A trigger e a tabela já está no schema SYS. De qualquer forma, executei este procedimento, mas o resultado foi exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o SESSION_USER retorna nulo, independente de existir ou não no banco o usuário informado no login. Se tiver mais alguma dica, agradeço! connect / as sysdba create user jlsilva identified by jlsilva quota unlimited on users; grant create session, create table to jlsilva; drop table jlsilva.log_falha_logon_tt purge; create table jlsilva.log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAME DATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST') HOST, sys_context('USERENV','TERMINAL') TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL from dual where 1=2; create or replace trigger sys.tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into jlsilva.log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USER format a15 column SESSION_USERID format a15 column AUTHENTICATION_TYPE format a15 column DATABASE_NAME format a15 column INSTANCE_NUM format 999 column SERVER_ERROR format 99 column IP_ADDRESS format a15 column HOST format a35 column TERMINAL format a15 column OS_USER format a15 column NETWORK_PROTOCOL format a15 select * from jlsilva.log_falha_logon_tt order by hora_ocorr; On Nov 29, 2011, at 15:55 , Marcos de Moura Gonçalves wrote: Cara, a minha trigger é muito parecida
Re: [oracle_br] Trigger para registrar tentativa de login
Mais uma pergunta: o usuário abc123 existe? A situação que eu logava era pq queria saber quem estava bloqueando o usuário da aplicação o tempo todo por excesso de tentativas de login com senha errada. No meu caso, o usuário sempre existia, só a senha era errada. Não sei o que acontece qdo tenta logar com usuário que não existe no banco... Em 29 de novembro de 2011 16:29, Marcos de Moura Gonçalves mgmar...@gmail.com escreveu: Um outro detalhe: eu reparei no seu script que vc ainda está conectado como SYS quando tenta fazer connect abc123/abc123. Pode ser esse o motivo de estar gravando SYS na tabela de log. Experimenta abrir outro putty e fazer sqlplus abc123/abc123 pra ver o q grava. Em 29 de novembro de 2011 16:12, Marcos de Moura Gonçalves mgmar...@gmail.com escreveu: Realmente, não percebi que no seu script vc se conecta como /. Eu vi o create trigger sem especificar o owner e achei que ficava em um outro owner. Não sei se ajuda, mas segue o código do trigger e tabela q eu fiz na época: CREATE TABLE marcos.erro_logon (dt_erro DATE DEFAULT SYSDATE ,txt_oracle_user VARCHAR2(30) ,txt_ip VARCHAR2(15) ,txt_maquina VARCHAR2(50) ,txt_os_user VARCHAR2(50) ,txt_software VARCHAR2(50) ,txt_tipo_autenticacao VARCHAR2(50) ,txt_erro VARCHAR2(100)) / CREATE OR REPLACE TRIGGER SYS.trg_as_erro_logon AFTER SERVERERROR ON DATABASE BEGIN IF ( is_servererror (1004) OR is_servererror (1005) OR is_servererror (1017) OR is_servererror (1035) OR is_servererror (1045) ) THEN INSERT INTO marcos.erro_logon (txt_oracle_user, txt_ip, txt_maquina, txt_os_user, txt_software, txt_tipo_autenticacao, txt_erro ) VALUES (SYS_CONTEXT ('USERENV', 'CURRENT_USER'), SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), SYS_CONTEXT ('USERENV', 'HOST'), SYS_CONTEXT ('USERENV', 'OS_USER'), SYS_CONTEXT ('USERENV', 'MODULE'), SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE'), DBMS_UTILITY.format_error_stack ); COMMIT; END IF; END trg_as_erro_logon; / Erros logados: 1004: ORA-01004: default username feature not supported; logon denied 1005: ORA-01005: null password given; logon denied 1017: ORA-01017: invalid username/password; logon denied 1035: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 1045: ORA-01045: user ... lacks CREATE SESSION privilege; logon denied []s Marcos Em 29 de novembro de 2011 16:08, JLSilva jljlsi...@yahoo.com.brescreveu: ** Olha, não entendo qual seria a diferença. A trigger e a tabela já está no schema SYS. De qualquer forma, executei este procedimento, mas o resultado foi exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o SESSION_USER retorna nulo, independente de existir ou não no banco o usuário informado no login. Se tiver mais alguma dica, agradeço! connect / as sysdba create user jlsilva identified by jlsilva quota unlimited on users; grant create session, create table to jlsilva; drop table jlsilva.log_falha_logon_tt purge; create table jlsilva.log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAME DATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST') HOST, sys_context('USERENV','TERMINAL') TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL from dual where 1=2; create or replace trigger sys.tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into jlsilva.log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USER format a15 column SESSION_USERID format a15 column
Re: [oracle_br] Trigger para registrar tentativa de login
Pois é, muito parecida. Eu guardei esse código, mas não trabalho mais no ambiente onde ela era usada. Onde eu tô agora nem tenho Oracle pra testar... Mas o resultado que eu obtia, com certeza, era o usuário da tentativa errada de login, e não SYS... Em 29 de novembro de 2011 16:31, JLSilva jljlsi...@yahoo.com.br escreveu: ** Marcos, realmente muito semelhante sua trigger. provavelmente me baseei nos mesmos exemplos.. rsrs.. mas, seguinte.. o TXT_ORACLE_USER sempre retorna SYS, porque a trigger executa no contexto do owner dela. pelo menos é o que está ocorrendo aqui no banco onde estou testando. será q você conseguiu um resultado diferente nessa coluna? On Nov 29, 2011, at 16:12 , Marcos de Moura Gonçalves wrote: Realmente, não percebi que no seu script vc se conecta como /. Eu vi o create trigger sem especificar o owner e achei que ficava em um outro owner. Não sei se ajuda, mas segue o código do trigger e tabela q eu fiz na época: CREATE TABLE marcos.erro_logon (dt_erro DATE DEFAULT SYSDATE ,txt_oracle_user VARCHAR2(30) ,txt_ip VARCHAR2(15) ,txt_maquina VARCHAR2(50) ,txt_os_user VARCHAR2(50) ,txt_software VARCHAR2(50) ,txt_tipo_autenticacao VARCHAR2(50) ,txt_erro VARCHAR2(100)) / CREATE OR REPLACE TRIGGER SYS.trg_as_erro_logon AFTER SERVERERROR ON DATABASE BEGIN IF ( is_servererror (1004) OR is_servererror (1005) OR is_servererror (1017) OR is_servererror (1035) OR is_servererror (1045) ) THEN INSERT INTO marcos.erro_logon (txt_oracle_user, txt_ip, txt_maquina, txt_os_user, txt_software, txt_tipo_autenticacao, txt_erro ) VALUES (SYS_CONTEXT ('USERENV', 'CURRENT_USER'), SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), SYS_CONTEXT ('USERENV', 'HOST'), SYS_CONTEXT ('USERENV', 'OS_USER'), SYS_CONTEXT ('USERENV', 'MODULE'), SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE'), DBMS_UTILITY.format_error_stack ); COMMIT; END IF; END trg_as_erro_logon; / Erros logados: 1004: ORA-01004: default username feature not supported; logon denied 1005: ORA-01005: null password given; logon denied 1017: ORA-01017: invalid username/password; logon denied 1035: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 1045: ORA-01045: user ... lacks CREATE SESSION privilege; logon denied []s Marcos Em 29 de novembro de 2011 16:08, JLSilva jljlsi...@yahoo.com.br escreveu: ** Olha, não entendo qual seria a diferença. A trigger e a tabela já está no schema SYS. De qualquer forma, executei este procedimento, mas o resultado foi exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o SESSION_USER retorna nulo, independente de existir ou não no banco o usuário informado no login. Se tiver mais alguma dica, agradeço! connect / as sysdba create user jlsilva identified by jlsilva quota unlimited on users; grant create session, create table to jlsilva; drop table jlsilva.log_falha_logon_tt purge; create table jlsilva.log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, ORA_DATABASE_NAME DATABASE_NAME, ORA_INSTANCE_NUM INSTANCE_NUM, ORA_SERVER_ERROR(1) SERVER_ERROR, sysdate HORA_OCORR, sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, sys_context('USERENV','HOST') HOST, sys_context('USERENV','TERMINAL') TERMINAL, sys_context('USERENV','OS_USER') OS_USER, sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL from dual where 1=2; create or replace trigger sys.tr_falha_logon_tt AFTER SERVERERROR ON DATABASE declare BEGIN IF IS_SERVERERROR(1017) THEN insert into jlsilva.log_falha_logon_tt ( SESSION_USER, AUTHENTICATION_TYPE, DATABASE_NAME, INSTANCE_NUM, SERVER_ERROR, HORA_OCORR, IP_ADDRESS, HOST, TERMINAL, OS_USER, NETWORK_PROTOCOL ) values ( --ORA_LOGIN_USER, sys_context('USERENV','CURRENT_USER'), --sys_context('USERENV','SESSION_USER'), --sys_context('USERENV','SESSION_USERID'), sys_context('USERENV','AUTHENTICATION_TYPE'), ORA_DATABASE_NAME, ORA_INSTANCE_NUM, ORA_SERVER_ERROR(1), sysdate, sys_context('USERENV','IP_ADDRESS'), sys_context('USERENV','HOST'), sys_context('USERENV','TERMINAL'), sys_context('USERENV','OS_USER'), sys_context('USERENV','NETWORK_PROTOCOL') ); END IF; END; / connect abc123/abc123 connect / as sysdba set linesize 999 pagesize 1000 column SESSION_USER format a15 column SESSION_USERID format a15 column AUTHENTICATION_TYPE format a15 column DATABASE_NAME format a15 column INSTANCE_NUM format 999 column SERVER_ERROR format 99 column IP_ADDRESS format a15 column HOST format a35 column TERMINAL format a15 column OS_USER format a15 column
Re: [oracle_br] Trigger para registrar tentativa de login
O ORA_LOGIN_USER retorna o login do usuário para outros erros, que não erros de login... Acontece que no erro de login, na prática, o cliente não fez login, por isso o ORA_LOGIN_USER não retorna nada... Só por curiosidade, se vc tentar logar com um usuário que existe e tem grant de create session, mas coloca a senha errada, o CURRENT_USER não traz o nome do usuário? Em 29 de novembro de 2011 16:49, JLSilva jljlsi...@yahoo.com.br escreveu: ** Marcos, fiz os testes desconectando e tentando conectar diretamente com um usuário que não existe ou que não tenha permissão de create session. Sua trigger funciona da mesma forma que a minha: o SYS_CONTEXT ('USERENV', 'CURRENT_USER') retorna o usuário SYS e as demais funções para pegar o nome do usuário do login retornam nulo. O que mais me incomoda é que a documentação diz que o ORA_LOGIN_USER deveria conter valor no evento SERVERERROR. E até tem valor, exceto quando é um erro de conexão ao banco de dados. Sua trigger tem uma evolução: ela registra a mensagem completa de erro através da função DBMS_UTILITY.format_error_stack. Desta forma, se o erro for, por exemplo, ORA-01045, aparece o nome do usuário aqui: ORA-01045: user JLSILVA lacks CREATE SESSION privilege; logon denied Mas, no caso do usuário inexistente, não é mostrado o nome do usuário que tentou a conexão. A mensagem fica assim: ORA-01017: invalid username/password; logon denied E era justamente esta a informaçào que mais me interessaria! rsrs.. Tamo quase chegando lá.. On Nov 29, 2011, at 16:32 , Marcos de Moura Gonçalves wrote: Mais uma pergunta: o usuário abc123 existe? A situação que eu logava era pq queria saber quem estava bloqueando o usuário da aplicação o tempo todo por excesso de tentativas de login com senha errada. No meu caso, o usuário sempre existia, só a senha era errada. Não sei o que acontece qdo tenta logar com usuário que não existe no banco... Em 29 de novembro de 2011 16:29, Marcos de Moura Gonçalves mgmar...@gmail.com escreveu: Um outro detalhe: eu reparei no seu script que vc ainda está conectado como SYS quando tenta fazer connect abc123/abc123. Pode ser esse o motivo de estar gravando SYS na tabela de log. Experimenta abrir outro putty e fazer sqlplus abc123/abc123 pra ver o q grava. Em 29 de novembro de 2011 16:12, Marcos de Moura Gonçalves mgmar...@gmail.com escreveu: Realmente, não percebi que no seu script vc se conecta como /. Eu vi o create trigger sem especificar o owner e achei que ficava em um outro owner. Não sei se ajuda, mas segue o código do trigger e tabela q eu fiz na época: CREATE TABLE marcos.erro_logon (dt_erro DATE DEFAULT SYSDATE ,txt_oracle_user VARCHAR2(30) ,txt_ip VARCHAR2(15) ,txt_maquina VARCHAR2(50) ,txt_os_user VARCHAR2(50) ,txt_software VARCHAR2(50) ,txt_tipo_autenticacao VARCHAR2(50) ,txt_erro VARCHAR2(100)) / CREATE OR REPLACE TRIGGER SYS.trg_as_erro_logon AFTER SERVERERROR ON DATABASE BEGIN IF ( is_servererror (1004) OR is_servererror (1005) OR is_servererror (1017) OR is_servererror (1035) OR is_servererror (1045) ) THEN INSERT INTO marcos.erro_logon (txt_oracle_user, txt_ip, txt_maquina, txt_os_user, txt_software, txt_tipo_autenticacao, txt_erro ) VALUES (SYS_CONTEXT ('USERENV', 'CURRENT_USER'), SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), SYS_CONTEXT ('USERENV', 'HOST'), SYS_CONTEXT ('USERENV', 'OS_USER'), SYS_CONTEXT ('USERENV', 'MODULE'), SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE'), DBMS_UTILITY.format_error_stack ); COMMIT; END IF; END trg_as_erro_logon; / Erros logados: 1004: ORA-01004: default username feature not supported; logon denied 1005: ORA-01005: null password given; logon denied 1017: ORA-01017: invalid username/password; logon denied 1035: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 1045: ORA-01045: user ... lacks CREATE SESSION privilege; logon denied []s Marcos Em 29 de novembro de 2011 16:08, JLSilva jljlsi...@yahoo.com.br escreveu: ** Olha, não entendo qual seria a diferença. A trigger e a tabela já está no schema SYS. De qualquer forma, executei este procedimento, mas o resultado foi exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o SESSION_USER retorna nulo, independente de existir ou não no banco o usuário informado no login. Se tiver mais alguma dica, agradeço! connect / as sysdba create user jlsilva identified by jlsilva quota unlimited on users; grant create session, create table to jlsilva; drop table jlsilva.log_falha_logon_tt purge; create table jlsilva.log_falha_logon_tt as select --ORA_LOGIN_USER SESSION_USER, sys_context('USERENV','CURRENT_USER') SESSION_USER, --sys_context('USERENV','SESSION_USER') SESSION_USER, --sys_context('USERENV','SESSION_USERID') SESSION_USERID, sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE,
Re: [oracle_br] Trigger ou audit ?
Só atente ao fato de Auditoria onerar consideravelmente a tua base de dados...tomar cuidado. At. Rodrigo Em 31 de agosto de 2011 13:07, Marcos Braga braga.mar...@gmail.comescreveu: Olá José Carlos, Acredito que o AUDIT seria mais prático e mais rápido de implementar. Pelo fato de não ser uma necessidade permanente, o desenvolvimento de triggers poderia ser em oneroso. []s Braga 2011/8/31 José Carlos Guerrieri guerrieri...@gmail.com ** Bom dia. Estou com o seguinte problema: Atendendo à necessidade de um cliente cujo legado é a existência de inúmeros dblinks públicos criados com usuário e senha, preciso saber qual usuário da base faz uso destes dblinks para chegar à(s) outra(s) instância(s). A possível solução seria uma trigger ou ligar o audit ? Agradeço a quem possa ajudar. José Carlos [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] TRIGGER
Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] TRIGGER
Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
RE: [oracle_br] TRIGGER
Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos
Re: [oracle_br] TRIGGER
Tá colocando o ; depois da procedure? BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') - ? END; Em 11 de agosto de 2011 14:41, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] TRIGGER
Qual o erro? que ocorre pra você. Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:41, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
RE: [oracle_br] TRIGGER
Nao tinha colocado o ; Mas continua a dar-me este erro - PLS-00201: identifier 'CARLOS.PRO_X' must be declared CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/'); END; Com os melhores cumprimentos, Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Álisson Zimermann Enviada: quinta-feira, 11 de Agosto de 2011 18:45 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Tá colocando o ; depois da procedure? BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') - ? END; Em 11 de agosto de 2011 14:41, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos
Re: [oracle_br] TRIGGER
Ele não está encontrando a sua procedure. Algumas perguntas: 1 - A procedure PRO_X, realmente existe no schema CARLOS, ou CARLOS é uma package? 2 - Se a trigger não está no mesmo schema, foi concedido privilégio de execute para o schema dono da trigger? Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:45, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Nao tinha colocado o ; Mas continua a dar-me este erro - PLS-00201: identifier 'CARLOS.PRO_X' must be declared CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/'); END; Com os melhores cumprimentos, Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Álisson Zimermann Enviada: quinta-feira, 11 de Agosto de 2011 18:45 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Tá colocando o ; depois da procedure? BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') - ? END; Em 11 de agosto de 2011 14:41, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br
RE: [oracle_br] TRIGGER
Era Isso...PERMISSOES. Agora estou com erro na TRIGGER quando faço o Insert ORA-01003: no statement parsed ORA-06512: at CARLOS.PRO_X, line 69 ORA-06512: at CARLOS.TRG_H_SII, line 3 ORA-04088: error during execution of trigger 'CARLOS.TRG_H_SII' Com os melhores cumprimentos, Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 19:08 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Ele não está encontrando a sua procedure. Algumas perguntas: 1 - A procedure PRO_X, realmente existe no schema CARLOS, ou CARLOS é uma package? 2 - Se a trigger não está no mesmo schema, foi concedido privilégio de execute para o schema dono da trigger? Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:45, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Nao tinha colocado o ; Mas continua a dar-me este erro - PLS-00201: identifier 'CARLOS.PRO_X' must be declared CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/'); END; Com os melhores cumprimentos, Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Álisson Zimermann Enviada: quinta-feira, 11 de Agosto de 2011 18:45 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Tá colocando o ; depois da procedure? BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') - ? END; Em 11 de agosto de 2011 14:41, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo
Re: [oracle_br] TRIGGER
Opa Carlos você deve estar declarando valores demais como parâmetro?Posta a sua procedure também. Como o Gerson falou era só declarar a sua procedure dentro do bloco, mas se ela tem parâmetros a coisa muda. Att Emerson Martins DBA Jr 82 9123-5504 82 9668-1283 Em 11 de agosto de 2011 14:45, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Nao tinha colocado o ; Mas continua a dar-me este erro - PLS-00201: identifier 'CARLOS.PRO_X' must be declared CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/'); END; Com os melhores cumprimentos, Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Álisson Zimermann Enviada: quinta-feira, 11 de Agosto de 2011 18:45 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Tá colocando o ; depois da procedure? BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') - ? END; Em 11 de agosto de 2011 14:41, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Mas da-me erro ao compilar CREATE TRIGGER TRG_H_SII AFTER INSERT ON H_SII REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN CARLOS.PRO_X('10.0.0.1', '21', 'teste', 'teste', 'S', '/SII/') END; Carlos Pinto -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Gerson Junior Enviada: quinta-feira, 11 de Agosto de 2011 18:40 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER Nem um nem outro. Simplesmente chama a procedure. create os replace trigger begin sua_procedure; end; / Só isso. Abraço!! Gerson S. de Vasconcelos Júnior OCA DBA - Oracle Certified Associate Fone: (81) 9816-0236 Msn: gerson.vasconce...@gmail.com Skype: gersonvjunior http://www.diaadiaoracle.com.br/ Em 11 de agosto de 2011 14:30, Carlos Pinto carlos.pin...@yahoo.com.brescreveu: ** Ola a todos, Posso executar uma PROCEDURE dentro de um TRIGGER? Como faço isso? Com o CALL ou EXECUTE? Obrigado Carlos Pinto [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie
[oracle_br] trigger de logon
Bom dia! Tenho uma trigger AFTER LOGON ON DATABASE, que funciona no meu ambiente de produção bloqueando acesso ao banco por ferramentas terceiras. Peguei essa mesma trigger e passei para um desenvolvedor adaptá-la para ele. Só que essa trigger não está funcionando, coloquei raises na trigger e parece que não está sendo disparada a trigger. O banco é o Oracle XE CREATE OR REPLACE TRIGGER LOG AFTER LOGON ON DATABASE DECLARE v_username SYS.gv_$session.username%TYPE; v_program SYS.gv_$session.program%TYPE; BEGIN raise_application_error (-2, 'Entrou 1!' ); BEGIN raise_application_error (-20001, 'Entrou 2!' ); SELECT username, program INTO v_username, v_program FROM SYS.gv_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 -- and USERNAME = 'CTE_COMP' AND ROWNUM = 1; raise_application_error (-20002, 'Passou SQL!' ); if v_username = 'CTE_COMP' THEN INSERT INTO (USERNAME, HORA_LOGIN, PROGRAM) VALUES(v_username, SYSDATE, v_program); commit; raise_application_error (-20003, 'Inseriu!' ); end if; EXCEPTION WHEN NO_DATA_FOUND THEN v_program := ''; raise_application_error (-20004, 'Erro!' ); END; END; Márcio. [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] trigger de logon
Senhores, estou com uma trigger para controlar o acesso dos usuario no ambiente de produção. Ela está funcionando, porem apresenta o erro de sql recursivo. A versão do oracle é 10.2.0.3.0. Fico grato com a ajuda de vcs. Segue a trigger e o erro: create or replace trigger log_restriction after logon on database begin for x in ( select CLIENT_IDENTIFIER, program from sys.v_$session where audsid = userenv('sessionid') ) loop if ltrim(rtrim(x.CLIENT_IDENTIFIER)) not in ('10.11.7.230','10.11.7.216','10.1.1.48','10.1.1.28' ,'10.1.1.15','127.0.0.1','10.1.1.31','200.198.213.112','200.198.202.105','10.1.1.36') or upper(ltrim(rtrim(x.program))) not in ( 'AETI.EXE' ,'SIRCX.EXE' ,'EQCASSERVICE.EXE' ,'SRVAQUISICAO.EXE' ,'SRVSOPHIABIB.EXE' ,'SRVBIB.EXE' ,'BIBLI.EXE' ,'MONC.EXE' ,'BIBCONF.EXE') then raise_application_error( -20999, 'USUÁRIO OU APLICAÇÃO NÃO AUTORIZADO PARA USO NO AMBIENTE DE PRODUÇÃO!'); end if; end loop; end log_restriction; / ORA-00604: ocorreu um erro no nível 1 SQL recursivo ORA-20999: USUÁRIO OU APLICAÇÃO NÃO AUTORIZADO PARA USO NO AMBIENTE DE PRODUÇÃO! -- Miguel Angelo Rodrigues da Silva Administrador de Banco de Dados Oracle [As partes desta mensagem que não continham texto foram removidas]
Res: [oracle_br] Trigger mutanting
Oi Debora tenta colocar no declare o comando abaixo. DECLARE PRAGMA AUTONOMOUS_TRANSACTION; Rejane. De: Eduardo Souza pjabran...@gmail.com Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 25 de Novembro de 2009 14:09:06 Assunto: Re: [oracle_br] Trigger mutanting Poderia enviar o código da solução adotada? 2009/11/25 Débora Acácio debby_ora...@yahoo.com.br Faz só um select e por isso estava dando erro. Fiz uma packege e alimentei duas variáveis pela trigger before... e na After eu valido com a package... Já está tudo ok Obrigada... Debby :) --- Em qua, 25/11/09, Eduardo eduardo.pa...@gmail.comeduardo.paula%40gmail.com escreveu: De: Eduardo eduardo.pa...@gmail.com eduardo.paula%40gmail.com Assunto: Re: [oracle_br] Trigger mutanting Para: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Data: Quarta-feira, 25 de Novembro de 2009, 11:53 ela está alterando a tabela que a dispara? 2009/11/25 Débora Acácio debby_ora...@yahoo.com.brdebby_oracle%40yahoo.com.br Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] -- -- Eduardo [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger mutanting
Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
RES: [oracle_br] Trigger mutanting
vc pode criar uma package para resolver o problema: na primeira trigger: create or replace trigger NOMETRIGGER_1 after insert or update or delete on NOMETABELA for each row declare .. begin if :new.atributo = ... PACOTE_PKG.VARIAVEL := X usar a variavel de uma package para guardar seu conteudo para fazer select na mesma tabela da trigger . end; na package create or replace package PACOTE_PKG as VARIAVELnumber(10); end; na segunda trigger de sua tabela create or replace trigger NOMETRIGGER_1 after insert or update or delete on NOMETABELA declare Begin if PACOTE_PKG.VARIAVEL is not null then select ... --pode fazer select na mesma tabela da primeira trigger from NOMETABELA where coluna = PACOTE_PKG.VARIAVEL end if; end; -Mensagem original- De: Débora Acácio [mailto:debby_ora...@yahoo.com.br] Enviada em: 25 de novembro de 2009 08:41 Para: Grp Oracle Assunto: [oracle_br] Trigger mutanting Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbusca http://br.maisbuscados.yahoo.com dos.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
RES: [oracle_br] Trigger mutanting
Isso ocorre quando vc precisa acessa a tabela onde esta a trigger. Vc pode declarar a sua trigger como Pragma Autonomous_Transaction para eliminar esse erro. Exemplo: CREATE OR REPLACE TRIGGER nome_trigger AFTER UPDATE ON nome_tabela REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE Pragma Autonomous_Transaction; BEGIN Sergio Lucchini De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em nome de Débora Acácio Enviada em: quarta-feira, 25 de novembro de 2009 09:41 Para: Grp Oracle Assunto: [oracle_br] Trigger mutanting Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] No virus found in this incoming message. Checked by AVG - www.avg.com Version: 8.5.423 / Virus Database: 270.14.81/2524 - Release Date: 11/24/09 19:37:00 [As partes desta mensagem que não continham texto foram removidas]
RES: [oracle_br] Trigger mutanting
Debby, Vou listar o procedimento básico para resolver esse problema: 1) Tenho a tabela funcionário com a seguinte estrutura: CREATE TABLE FUNC ( CD_MATNUMBER(3) NOT NULL PRIMARY KEY, NR_GITNUMBER(2), VL_SALNUMBER(9,2) 2) Tenho uma trigger para atualizar o salário do funcionário. CREATE OR REPLACE TRIGGER checa_salario BEFORE UPDATE OF vl_sal, nr_git ON FUNC FOR EACH ROW WHEN (NEW.nr_git 56) DECLARE salario_minimo NUMBER(5) := 0; salario_maximo NUMBER(5) := 0; faixaEXCEPTION; negativo EXCEPTION; BEGIN SELECT MIN(vl_sal), Max(vl_sal) INTO salario_minimo, salario_maximo FROM FUNC WHERE nr_git = :new.nr_git; IF (:NEW.vl_sal salario_minimo OR :NEW.vl_sal salario_maximo) THEN RAISE faixa; ELSIF (:NEW.VL_SAL :OLD.vl_sal) THEN RAISE negativo; END IF; EXCEPTION WHEN faixa THEN RAISE_APPLICATION_ERROR (-20225, 'Salário fora da faixa'); WHEN negativo THEN RAISE_APPLICATION_ERROR (-20230, 'Incremento negativo'); END; Que quando executo dá erro de multante, pois estou realizando uma consulta na mesma tabela que estou atualizando. 3) Resolvendo Criei uma tabela temporária com a mesma estrutura de FUNC de nome TFUNC_MUT. DROP TABLE TFUNC_MUT; CREATE TABLE TFUNC_MUT ( CD_MATNUMBER(3) NOT NULL PRIMARY KEY, NR_GITNUMBER(2), VL_SALNUMBER(9,2), NR_ORDEM NUMBER,--- nova coluna STATUSVARCHAR2(10) --- nova coluna ) DROP SEQUENCE ORDEM / CREATE SEQUENCE ORDEM ORDER START WITH 1 NOCYCLE / 4) Recrio a trigger gravando na tabela temporária CREATE OR REPLACE TRIGGER checa_salario BEFORE UPDATE OF vl_sal, nr_git ON FUNC FOR EACH ROW WHEN (NEW.nr_git 56) DECLARE salario_minimo NUMBER(5) := 0; salario_maximo NUMBER(5) := 0; qtd NUMBER; negativo EXCEPTION; BEGIN IF (:NEW.VL_SAL :OLD.vl_sal) THEN RAISE negativo; ELSE SELECT COUNT(*) INTO qtd FROM tfunc_mut where cd_mat = :new.cd_mat; IF qtd = 0 THEN INSERT INTO TFUNC_MUT (cd_mat, vl_sal, nr_git, nr_ordem, status) VALUES (:NEW.cd_mat,:NEW.vl_sal,:NEW.nr_git, ordem.nextval, 'VALID'); :NEW.vl_sal := :OLD.vl_sal; end if; END IF; EXCEPTION WHEN negativo THEN RAISE_APPLICATION_ERROR (-20230, 'Incremento negativo'); END; 5) Crio nova trigger CREATE OR REPLACE TRIGGER checa_salario_mut AFTER UPDATE OF vl_sal, nr_git ON FUNC DECLARE cursor wc is SELECT * FROM tfunc_mut WHERE status = 'VALID' ORDER BY NR_ORDEM FOR UPDATE; salario_minimo NUMBER(5) := 0; salario_maximo NUMBER(5) := 0; faixaEXCEPTION; TYPE TIPO_MUT IS TABLE OF TFUNC_MUT%ROWTYPE INDEX BY BINARY_INTEGER; TABMUT TIPO_MUT; I NUMBER := 0; BEGIN FOR wr IN wc LOOP SELECT MIN(vl_sal), MAX(vl_sal) INTO salario_minimo, salario_maximo FROM func WHERE nr_git = wr.nr_git; IF wr.vl_sal salario_minimo OR wr.vl_sal salario_maximo THEN RAISE faixa; ELSE I := I + 1; TABMUT(I) := WR; UPDATE tfunc_mut SET status = 'INVALID'; END IF; END LOOP; FOR J IN 1..I LOOP UPDATE func SET vl_sal = TABMUT(J).vl_sal, nr_git = TABMUT(J).nr_git WHERE cd_mat = TABMUT(J).cd_mat; END LOOP; IF I 0 THEN DELETE FROM tfunc_mut; END IF; EXCEPTION WHEN faixa THEN DELETE FROM tfunc_mut; RAISE_APPLICATION_ERROR (-20230, 'Salário fora da faixa'); END; / Verifique se os códigos acima lhe ajudam para resolver seu problema. Boa sorte. Atenciosamente, Sérgio Chaves. De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em nome de Sergio Lucchini Enviada em: quarta-feira, 25 de novembro de 2009 10:58 Para: oracle_br@yahoogrupos.com.br Assunto: RES: [oracle_br] Trigger mutanting Isso ocorre quando vc precisa acessa a tabela onde esta a trigger. Vc pode declarar a sua trigger como Pragma Autonomous_Transaction para eliminar esse erro. Exemplo: CREATE OR REPLACE TRIGGER nome_trigger AFTER UPDATE ON nome_tabela REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE Pragma Autonomous_Transaction; BEGIN Sergio Lucchini De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de Débora Acácio Enviada em: quarta-feira, 25 de novembro de 2009 09:41 Para: Grp Oracle Assunto: [oracle_br] Trigger mutanting Olá Estou tendo um problema numa trigger que estou alterando está
Res: RES: [oracle_br] Trigger mutanting
Ainda recomendaria o a utilização de uma transação autonoma. O problema de trigger mutante tambem é propagado em referências cíclicas, para o caso em questão não vejo grandes problemas de utilizar a transação autonoma. Atenciosamente, Caio Spadafora. De: Sérgio Luiz Rodrigues Chaves sergio.cha...@elumini.com.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 25 de Novembro de 2009 11:59:13 Assunto: RES: [oracle_br] Trigger mutanting Debby, Vou listar o procedimento básico para resolver esse problema: 1) Tenho a tabela funcionário com a seguinte estrutura: CREATE TABLE FUNC ( CD_MATNUMBER(3) NOT NULL PRIMARY KEY, NR_GITNUMBER(2), VL_SALNUMBER(9,2) 2) Tenho uma trigger para atualizar o salário do funcionário. CREATE OR REPLACE TRIGGER checa_salario BEFORE UPDATE OF vl_sal, nr_git ON FUNC FOR EACH ROW WHEN (NEW.nr_git 56) DECLARE salario_minimo NUMBER(5) := 0; salario_maximo NUMBER(5) := 0; faixaEXCEPTION; negativo EXCEPTION; BEGIN SELECT MIN(vl_sal), Max(vl_sal) INTO salario_minimo, salario_maximo FROM FUNC WHERE nr_git = :new.nr_git; IF (:NEW.vl_sal salario_minimo OR :NEW.vl_sal salario_maximo) THEN RAISE faixa; ELSIF (:NEW.VL_SAL :OLD.vl_sal) THEN RAISE negativo; END IF; EXCEPTION WHEN faixa THEN RAISE_APPLICATION_ ERROR (-20225, 'Salário fora da faixa'); WHEN negativo THEN RAISE_APPLICATION_ ERROR (-20230, 'Incremento negativo'); END; Que quando executo dá erro de multante, pois estou realizando uma consulta na mesma tabela que estou atualizando. 3) Resolvendo.. .. Criei uma tabela temporária com a mesma estrutura de FUNC de nome TFUNC_MUT. DROP TABLE TFUNC_MUT; CREATE TABLE TFUNC_MUT ( CD_MATNUMBER(3) NOT NULL PRIMARY KEY, NR_GITNUMBER(2), VL_SALNUMBER(9,2), NR_ORDEM NUMBER,--- nova coluna STATUSVARCHAR2(10) --- nova coluna ) DROP SEQUENCE ORDEM / CREATE SEQUENCE ORDEM ORDER START WITH 1 NOCYCLE / 4) Recrio a trigger gravando na tabela temporária CREATE OR REPLACE TRIGGER checa_salario BEFORE UPDATE OF vl_sal, nr_git ON FUNC FOR EACH ROW WHEN (NEW.nr_git 56) DECLARE salario_minimo NUMBER(5) := 0; salario_maximo NUMBER(5) := 0; qtd NUMBER; negativo EXCEPTION; BEGIN IF (:NEW.VL_SAL :OLD.vl_sal) THEN RAISE negativo; ELSE SELECT COUNT(*) INTO qtd FROM tfunc_mut where cd_mat = :new.cd_mat; IF qtd = 0 THEN INSERT INTO TFUNC_MUT (cd_mat, vl_sal, nr_git, nr_ordem, status) VALUES (:NEW.cd_mat, :NEW.vl_sal, :NEW.nr_git, ordem.nextval, 'VALID'); :NEW.vl_sal := :OLD.vl_sal; end if; END IF; EXCEPTION WHEN negativo THEN RAISE_APPLICATION_ ERROR (-20230, 'Incremento negativo'); END; 5) Crio nova trigger CREATE OR REPLACE TRIGGER checa_salario_ mut AFTER UPDATE OF vl_sal, nr_git ON FUNC DECLARE cursor wc is SELECT * FROM tfunc_mut WHERE status = 'VALID' ORDER BY NR_ORDEM FOR UPDATE; salario_minimo NUMBER(5) := 0; salario_maximo NUMBER(5) := 0; faixaEXCEPTION; TYPE TIPO_MUT IS TABLE OF TFUNC_MUT%ROWTYPE INDEX BY BINARY_INTEGER; TABMUT TIPO_MUT; I NUMBER := 0; BEGIN FOR wr IN wc LOOP SELECT MIN(vl_sal), MAX(vl_sal) INTO salario_minimo, salario_maximo FROM func WHERE nr_git = wr.nr_git; IF wr.vl_sal salario_minimo OR wr.vl_sal salario_maximo THEN RAISE faixa; ELSE I := I + 1; TABMUT(I) := WR; UPDATE tfunc_mut SET status = 'INVALID'; END IF; END LOOP; FOR J IN 1..I LOOP UPDATE func SET vl_sal = TABMUT(J).vl_ sal, nr_git = TABMUT(J).nr_ git WHERE cd_mat = TABMUT(J).cd_ mat; END LOOP; IF I 0 THEN DELETE FROM tfunc_mut; END IF; EXCEPTION WHEN faixa THEN DELETE FROM tfunc_mut; RAISE_APPLICATION_ ERROR (-20230, 'Salário fora da faixa'); END; / Verifique se os códigos acima lhe ajudam para resolver seu problema. Boa sorte. Atenciosamente, Sérgio Chaves. _ _ __ De: oracle...@yahoogrup os.com.br [mailto:oracle...@yahoogrup os.com.br] Em nome de Sergio Lucchini Enviada em: quarta-feira, 25 de novembro de 2009 10:58 Para: oracle...@yahoogrup os.com.br Assunto: RES: [oracle_br] Trigger mutanting Isso ocorre quando vc precisa acessa a tabela onde esta a trigger. Vc pode declarar a sua trigger como Pragma Autonomous_Transact ion para eliminar esse erro. Exemplo: CREATE OR REPLACE TRIGGER nome_trigger AFTER UPDATE ON nome_tabela REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE Pragma Autonomous_Transact ion; BEGIN Sergio Lucchini _ _ __ De: oracle...@yahoogrup os.com.br mailto:oracle_ br%40yahoogrupos .com.br [mailto:oracle...@yahoogrup os.com.br mailto:oracle_ br%40yahoogrupos .com.br ] Em nome de Débora Acácio Enviada em: quarta-feira, 25 de novembro de 2009 09:41 Para: Grp Oracle Assunto: [oracle_br
Re: [oracle_br] Trigger mutanting
Olha, veja se consegue fazer isso via procedure !!! Estou dando uma opinião no escuro (não sei do que se trata) mas, dependendo da situação, via aplicação pode chamar uma procedure em alguns casos. Abraço, Aristides 2009/11/25 Débora Acácio debby_ora...@yahoo.com.br Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] -- -- Eduardo [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos
Re: [oracle_br] Trigger mutanting
Faz só um select e por isso estava dando erro. Fiz uma packege e alimentei duas variáveis pela trigger before... e na After eu valido com a package... Já está tudo ok Obrigada... Debby :) --- Em qua, 25/11/09, Eduardo eduardo.pa...@gmail.com escreveu: De: Eduardo eduardo.pa...@gmail.com Assunto: Re: [oracle_br] Trigger mutanting Para: oracle_br@yahoogrupos.com.br Data: Quarta-feira, 25 de Novembro de 2009, 11:53 ela está alterando a tabela que a dispara? 2009/11/25 Débora Acácio debby_ora...@yahoo.com.br Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] -- -- Eduardo [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger mutanting - Aristides
Obrigada Aristides e todos que me responderam.. Fiz uma package e criei uma outra trigger AFTER e resolvi o problema... Sds Debby --- Em qua, 25/11/09, Arystydes arysty...@bol.com.br escreveu: De: Arystydes arysty...@bol.com.br Assunto: Re: [oracle_br] Trigger mutanting Para: oracle_br@yahoogrupos.com.br Data: Quarta-feira, 25 de Novembro de 2009, 16:30 Olha, veja se consegue fazer isso via procedure !!! Estou dando uma opinião no escuro (não sei do que se trata) mas, dependendo da situação, via aplicação pode chamar uma procedure em alguns casos. Abraço, Aristides 2009/11/25 Débora Acácio debby_ora...@yahoo.com.br Olá Estou tendo um problema numa trigger que estou alterando está dando erro de trigger mutanting... alguém poderia me ajudar ? Grata Debby :) __ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] -- -- Eduardo [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] TRIGGER chamando PROCEDURE
Senhores, Boa Tarde Estou necessitando chamar uma Procedure através de uma trigger conforme exemplo abaixo: CREATE OR REPLACE TRIGGER NOME_TRIGGER AFTER INSERT OR UPDATE ON NOME_TABELA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN NOME_PROCEDURE(:NEW.SAFRA, :NEW.EMPRESA, :NEW.FILIAL, :NEW.OCMESTRE); END; Situação: A trigger NÃO apresenta nenhum erro, e a procedure não é executada. Alguém pode ajudar? Oracle Database 10g Release 10.2.0.4.0 - 64bit Production Linux Fedora 64btis Cesar O Horta
Re: [oracle_br] TRIGGER chamando PROCEDURE
Vc tem certeza que as colunas SAFRA, EMPRESA, FILIAL,OCMESTRE estão sendo preenchidos na hora do insert e update? Pois voce pode estar passando valores nulos pra procedure. 2009/9/14 Cesar Otoganizo da Horta cesarho...@triline.com.br Senhores, Boa Tarde Estou necessitando chamar uma Procedure através de uma trigger conforme exemplo abaixo: CREATE OR REPLACE TRIGGER NOME_TRIGGER AFTER INSERT OR UPDATE ON NOME_TABELA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN NOME_PROCEDURE(:NEW.SAFRA, :NEW.EMPRESA, :NEW.FILIAL, :NEW.OCMESTRE); END; Situação: A trigger NÃO apresenta nenhum erro, e a procedure não é executada. Alguém pode ajudar? Oracle Database 10g Release 10.2.0.4.0 - 64bit Production Linux Fedora 64btis Cesar O Horta -- José Eduardo Batista Juliano Cel (16)9189-2486 Híade Informática Consultoria Oracle e desenvolvimento de sistemas. Ribeirão Preto - SP [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
RES: [oracle_br] TRIGGER chamando PROCEDURE
Tente colocar BEFORE update ... Se não funcionar coloca dentro da tua trigger um DBMS_OUTPUT.PUT_LINE(' SAFRA = ' || NEW.SAFRA || ' EMPRESA = ' || :NEW.EMPRESA || ' FILIAL = ' || :NEW.FILIAL || ' OCMESTRE = ' || :NEW.OCMESTRE ); Depois de um update manual em um registro da tabela. Com isso vc vai poder ter certeza se a trigger esta ou não passando os valores nulos para a procedure. Obrigado, Sergio Lucchini -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em nome de José Eduardo Batista Juliano Enviada em: segunda-feira, 14 de setembro de 2009 16:10 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] TRIGGER chamando PROCEDURE Vc tem certeza que as colunas SAFRA, EMPRESA, FILIAL,OCMESTRE estão sendo preenchidos na hora do insert e update? Pois voce pode estar passando valores nulos pra procedure. 2009/9/14 Cesar Otoganizo da Horta cesarho...@triline.com.br Senhores, Boa Tarde Estou necessitando chamar uma Procedure através de uma trigger conforme exemplo abaixo: CREATE OR REPLACE TRIGGER NOME_TRIGGER AFTER INSERT OR UPDATE ON NOME_TABELA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN NOME_PROCEDURE(:NEW.SAFRA, :NEW.EMPRESA, :NEW.FILIAL, :NEW.OCMESTRE); END; Situação: A trigger NÃO apresenta nenhum erro, e a procedure não é executada. Alguém pode ajudar? Oracle Database 10g Release 10.2.0.4.0 - 64bit Production Linux Fedora 64btis Cesar O Horta -- José Eduardo Batista Juliano Cel (16)9189-2486 Híade Informática Consultoria Oracle e desenvolvimento de sistemas. Ribeirão Preto - SP [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos http://br.groups.yahoo.com/group/oracle_br/ oracle_br-unsubscr...@yahoogrupos.com.br http://br.yahoo.com/info/utos.html Checked by AVG - www.avg.com Version: 8.5.408 / Virus Database: 270.13.93/2365 - Release Date: 09/12/09 06:37:00 [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger de logon erro ao se conectar
Boa tarde Foi criada uma trigger de logon a determinado schema com sucesso porém ao me conectar com o owner está ocorrendo o seguinte erro: ORA-00604: error occurred at recursive SQL level 1 ORA-00900: invalid SQL statement ORA-06512: at line 4 Abaixo os dados da BD: BANNER Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Release 10.2.0.4.0 - Production CORE10.2.0.4.0 Production TNS for HPUX: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production Segue abaixo o script da trigger que foi criada CREATE OR REPLACE TRIGGER SYS.logon_CDCADMIN_SCHEMA AFTER LOGON ON CDCADMIN.SCHEMA DECLARE lcommand varchar(200); BEGIN Execute Immediate 'execute sys.DBMS_LOGMNR_D.BUILD( OPTIONS= sys.DBMS_LOGMNR_D.STORE_IN_REDO_LOGS)'; Execute Immediate 'execute sys.dbms_logmnr.add_logfile( logfilename = '/oracle/OE2E_T1/log01/log01_1.rdo',options = sys.dbms_logmnr.new)'; Execute Immediate 'execute sys.dbms_logmnr.add_logfile( logfilename = '/oracle/OE2E_T1/log01/log02_1.rdo',options = sys.dbms_logmnr.addfile)'; Execute Immediate 'execute sys.dbms_logmnr.add_logfile( logfilename = '/oracle/OE2E_T1/log01/log03_1.rdo',options = sys.dbms_logmnr.addfile)'; Execute Immediate 'execute sys.dbms_logmnr.add_logfile( logfilename = '/oracle/OE2E_T1/log01/log04_1.rdo',options = sys.dbms_logmnr.addfile)'; Execute Immediate 'execute sys.dbms_logmnr.start_logmnr()'; END; / Agradeço desde já Ricardo Hoffmann [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger para bloqueio de Acesso com PL/SQL ou SQL PLUS
Bom dia coelgas, tudo bom ? Vi ha algum tempo atras em um forum, uma trigger que bloqueava acessos de usuário que estivessem se conectando com SQL PLUS ou PLSQL DEVELOPR por exemplo mas não me recordo com a mesma tinha sido desenvolvida... A ideia era bloquear acessos a determinados esquemas com a utilização de aplicação de desenvolvimento (SQL PLUS, PL/SQL DEVELOPER. ORACLE SQL SEVELOPER, TOAD E ETC). Minha ideia seria uma trigger que seria aplicada em um determinado usuário e, após o logon do mesmo, estes aplicativos fossem bloqueados. Alguem teria alguma luz sobre este assunto ? è justamente para evitar acessos indesejados na base de dados... abraços
Re: [oracle_br] Trigger para bloqueio de Acesso com PL/SQL ou SQL PLUS
E ai brow . não sei se essa é a mesma trigger que voce ta falando , mais acho que pode resolver o seu problema da uma olhada. begin- create or replace trigger on_logon after logon on database declare v_sid number; v_isdba varchar2(10); v_program varchar2(30); begin execute immediate 'select distinct sid from sys.v_$mystat' into v_sid; execute immediate 'select program from sys.v_$session where sid = :b1' into v_program using v_sid; select sys_context('userenv', 'ISDBA') into v_isdba from dual; if upper(v_program) = 'PLSQLDEV.EXE' and v_isdba = 'FALSE' then -- o nome do programa tem que ser em maiusculo. raise_application_error(-20001,'A Ferramenta PL/SQL Developer é limitada apenas aos DBA'||chr(39)||'s',true); end if; end; / end- 2009/5/19 candiurudba candiuru...@yahoo.com.br Bom dia coelgas, tudo bom ? Vi ha algum tempo atras em um forum, uma trigger que bloqueava acessos de usuário que estivessem se conectando com SQL PLUS ou PLSQL DEVELOPR por exemplo mas não me recordo com a mesma tinha sido desenvolvida... A ideia era bloquear acessos a determinados esquemas com a utilização de aplicação de desenvolvimento (SQL PLUS, PL/SQL DEVELOPER. ORACLE SQL SEVELOPER, TOAD E ETC). Minha ideia seria uma trigger que seria aplicada em um determinado usuário e, após o logon do mesmo, estes aplicativos fossem bloqueados. Alguem teria alguma luz sobre este assunto ? è justamente para evitar acessos indesejados na base de dados... abraços [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger Before update
Bom dia, Pessoal ! Estou implementando uma trigger, onde eu preciso também saber o usuário que fez a alteração. Nesse caso somente pela v$session eu consigo fazer isso? Oracle 10g. CREATE OR REPLACE TRIGGER BRADAPVM.TG_LOG_ATIVA_PROP BEFORE UPDATE ON PROP FOR EACH ROW BEGIN IF (:OLD.MARCA IN (4,7)) AND (:NEW.MARCA NOT IN (4,7)) THEN INSERT INTO LOG (NRPLAN, CD_STAT_OLD, CD_STAT_NEW, CD_OPER, MARCA_OLD, MARCA_NEW, DTAGENDA, DTDIGI, DTGRAVA) VALUES (:NEW.NRPLAN, :OLD.CD_STAT, :NEW.CD_STAT, :NEW.CD_OPER, :OLD.MARCA, :NEW.MARCA, :NEW.DTAGENDA, :NEW.DTDIGI, SYSDATE); END IF; END TG_LOG_ATIVA_PROP; Obrigado. Marcelo. [As partes desta mensagem que não continham texto foram removidas]
Res: [oracle_br] Trigger Before update
A variável User armazena o usuário logado no banco. De: Marcelo Lopes Garcez mgar...@work.srv.br Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 14 de Maio de 2009 15:24:07 Assunto: [oracle_br] Trigger Before update Bom dia, Pessoal ! Estou implementando uma trigger, onde eu preciso também saber o usuário que fez a alteração. Nesse caso somente pela v$session eu consigo fazer isso? Oracle 10g. CREATE OR REPLACE TRIGGER BRADAPVM.TG_ LOG_ATIVA_ PROP BEFORE UPDATE ON PROP FOR EACH ROW BEGIN IF (:OLD.MARCA IN (4,7)) AND (:NEW.MARCA NOT IN (4,7)) THEN INSERT INTO LOG (NRPLAN, CD_STAT_OLD, CD_STAT_NEW, CD_OPER, MARCA_OLD, MARCA_NEW, DTAGENDA, DTDIGI, DTGRAVA) VALUES (:NEW.NRPLAN, :OLD.CD_STAT, :NEW.CD_STAT, :NEW.CD_OPER, :OLD.MARCA, :NEW.MARCA, :NEW.DTAGENDA, :NEW.DTDIGI, SYSDATE); END IF; END TG_LOG_ATIVA_ PROP; Obrigado. Marcelo. [As partes desta mensagem que não continham texto foram removidas] Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger no oracle 10G
oi pessoal alguém poderia me dizer se é possivel fazer insert dentro de uma trigger na parte do exeption? to usando triggers para auditoria. Obrigado -- __ Leonardo Santos da Mata __ MSN: leonardodam...@hotmail.com GTalk: leonardodamata SKYPE: lsmata TWITTER: leonardodamata E-MAIL: leonardodam...@gmail.com __ [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] trigger
boa tarde ! Pessoal preciso de uma ajuda. Tenho duas tabelas, autorizacao e servico_da_autorizacao. na tabela autorizacao tenho o funcionario_competente na qual preciso alterar de acordo com as situações do serviços na tabela servico_da_autorizacao. Exemplo: num protocolo posso ter diversos serviços com as seguintes situações:Aprovado, Reprovado, Cancelado, Substituido. Toda vez que o funcionario_competente for igual a Notificar e todos os serviços estiverem com a situação Aprovado, tenho que alterar o funcionario competente para Auto_Finaliz porém se por algum motivo a situação do serviço for alterada para outra situação que não seja Aprovado voltar para o funcionario_competente para Notificar. segue abaixo como estou fazendo, mas não estou conseguindo alterar. Alguém poderia me ajudar. Att.,Ewerton create or replace trigger TR_BIU_AUTORIZACAO_AUTOFIN before UPDATE ON PRODUCAO.AUTORIZACAO FOR EACH ROW DECLARE V_RESULTADO NUMBER; BEGIN IF :NEW.CDFUNCIONARIO_COMPETENTE = 'NOTIFICAR' THEN SELECT SUM(CASE WHEN SA.CDSITUACAO 'AP' THEN 1 WHEN SA.CDSITUACAO IS NULL THEN 1 ELSE 0 END ) AS OUTROS into V_resultado FROM PRODUCAO.SERVICO_DA_AUTORIZACAO SA, PRODUCAO.AUTORIZACAOAU WHERE SA.NRAUTORIZACAO = :NEW.NRAUTORIZACAO AND AU.NRAUTORIZACAO = SA.NRAUTORIZACAO; IF V_RESULTADO = 0 THEN :NEW.CDFUNCIONARIO_COMPETENTE := 'AUTO_FINALIZ'; END IF; END IF; END TR_BIU_AUTORIZACAO_AUTOFIN;
[oracle_br] Trigger em Nested Table
Bom dia pessoal, Esse é meu primeiro post e já agradeço antecipado pela ajuda. Tenho a seguinte estrutura: create or replace type compromisso as object ( data date, inicio date, duracao number(4), descricao varchar(255) ); create or replace type compromisso_lista as table of compromisso; create or replace type usuario as object ( codigo number(4), nome varchar(40), compromissos compromisso_lista ); create table usuarios of usuario ( codigo primary key ) nested table compromissos store as compromissos_st; Como faço para criar uma trigger que seja disparada ao inserir ou atualizar a nested table com o intuito de evitar choque de horário entre os compromissos cadastrados para um usuário? Por exemplo: insert into table(select u.compromissos from usuarios u where u.codigo = 1) values (to_date(11/11/2008', 'DD/MM/'), to_date(11/11/2008 12:00', 'DD/MM/ HH24:MI', 120, 'tirar dúvidas'); Caso o compromisso abaixo fosse inserido um erro seria retornado devido ao choque de horário: insert into table(select u.compromissos from usuarios u where u.codigo = 1) values (to_date(11/11/2008', 'DD/MM/'), to_date(11/11/2008 13:00', 'DD/MM/ HH24:MI', 120, 'tirar dúvidas'); Pois, o compromisso anterior começa 12:00 mas tem duração de 120 minutos, ou seja, às 13:00 não seria possível se cadastrar outro compromisso. Alguma sugestão? Obrigado, Robert [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger autenticação
Será que alguem pode me ajudar nessa trigger? A função dela é enviar um e-mail ao usuário que tiver uma tarefa atribuida ao seu login, mas ela agora esta com um erro no smtp que antes era open relay e agora não é mais, ou seja ele precisa de autenticação de usuário e senha para concluir o envio. Alguém poderia me dizer o comando eu posso colar nessa trigger para que ela autentique usuário e senha antes do envio. Muito, mas mto obrigada pessoal! * declare *sSrcEmail *varchar2*(255); sSrcName *varchar2*(255); sMsg *varchar2*(255); sEmail *varchar2*(255); xmessag *varchar2*(255); * -- username varchar2(256) := 'crm'; -- passwd varchar2(256) := '12345'; **PROCEDURE *send_mail (sender *IN VARCHAR2*, recipient *IN VARCHAR2*, subject *IN VARCHAR2*, message *IN VARCHAR2*) *IS **--mailhost VARCHAR2(30) := 'Exchange1'; -- NOME OU IP DO SERVIDOR DE SMTP *mailhost *VARCHAR2*(30) := '15.15.1.1'; *--'172.17.10.131'; -- NOME OU IP DO SERVIDOR DE SMTP *mail_conn *utl_smtp*.connection; crlf *VARCHAR2*( 2 ):= *CHR*( 13 ) || *CHR*( 10 ); mesg *VARCHAR2*( 1000 ); *BEGIN *mail_conn := *utl_smtp*.open_connection(mailhost, 25); mesg:= 'Date: ' || *TO_CHAR*( *SYSDATE*, 'dd Mon yy hh24:mi:ss' ) || crlf || 'From: '||sender||'' || crlf || 'Subject: '||subject || crlf || 'To: '||recipient || crlf || * -- 'To: '||'[EMAIL PROTECTED]' || crlf || *' '||crlf|| 'A manifestac?o numero ' || :new.incident_number || ' foi encaminhada a voce.'||crlf|| ' '||crlf||'Para acessar o sistema, clique em: http://anpprod.gpnetrj.com.br:8000/'; *utl_smtp*.helo(mail_conn, mailhost); *utl_smtp*.mail(mail_conn, sender); *utl_smtp*.rcpt(mail_conn, recipient); * -- utl_smtp.rcpt(mail_conn, '[EMAIL PROTECTED]'); -- utl_smtp.open_data(mail_conn); **utl_smtp*.data(mail_conn, mesg); *utl_smtp*.quit(mail_conn); *Exception WHEN **OTHERS **THEN *raise_application_error(-20002,'unable to send the mail.'||*SQLERRM*); *END*; * Begin if *:new.incident_owner_id :old.incident_owner_id *then *sMsg := 'Erro ao buscar email do novo responsavel. '; *select distinct nvl*(fu.EMAIL_ADDRESS,'NO_EMAIL') ,fu.user_name *into *sSrcEmail ,sSrcName *from *jtf_rs_resource_extns jr , fnd_user fu *where *jr.user_id = fu.user_id *and *jr.resource_id = :new.incident_owner_id; *if *sSrcEmail 'NO_EMAIL' *then ** -- sMsg := 'Erro ao enviar email para novo responsavel. '; *sMsg := '...'; sEmail := 'A manifestac?o numero ' || :new.incident_number || ' foi encaminhada a voce.'; send_mail ('[EMAIL PROTECTED]',sSrcEmail ,sEmail,xmessag ); *--send_mail ('[EMAIL PROTECTED]','[EMAIL PROTECTED]' ,sEmail || sSrcEmail ,xmessag ); **end if*; *end if*; * exception when **no_data_found **then **-- email nao obrigatorio **null*; *when **others **then *sMsg := sMsg || *substr*(*sqlerrm*,1,700); raise_application_error(-20300, sMsg); * End*; -- Fabiana Moreira Consultora Funcional Trainee - GPTI Celular: (21) 9382-0945 E-mail: [EMAIL PROTECTED] Msn: [EMAIL PROTECTED] -- declare sSrcEmail varchar2(255); sSrcName varchar2(255); sMsg varchar2(255); sEmail varchar2(255); xmessag varchar2(255); -- username varchar2(256) := 'crm'; -- passwd varchar2(256) := '12345'; PROCEDURE send_mail (sender IN VARCHAR2, recipient IN VARCHAR2, subject IN VARCHAR2, message IN VARCHAR2) IS --mailhost VARCHAR2(30) := 'Exchange1'; -- NOME OU IP DO SERVIDOR DE SMTP mailhost VARCHAR2(30) := '15.15.1.1'; --'172.17.10.131'; -- NOME OU IP DO SERVIDOR DE SMTP mail_conn utl_smtp.connection; crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 ); mesg VARCHAR2( 1000 ); BEGIN mail_conn := utl_smtp.open_connection(mailhost, 25); mesg:= 'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || crlf || 'From: '||sender||'' || crlf || 'Subject: '||subject || crlf || 'To: '||recipient || crlf || --'To: '||'[EMAIL PROTECTED]' || crlf || ' '||crlf|| 'A manifestac?o numero ' || :new.incident_number || ' foi encaminhada a voce.'||crlf|| ' '||crlf||'Para acessar o sistema, clique em: http://anpprod.gpnetrj.com.br:8000/'; utl_smtp.helo(mail_conn, mailhost); utl_smtp.mail(mail_conn, sender); utl_smtp.rcpt(mail_conn, recipient); -- utl_smtp.rcpt(mail_conn, '[EMAIL PROTECTED]'); -- utl_smtp.open_data(mail_conn); utl_smtp.data(mail_conn, mesg); utl_smtp.quit(mail_conn); Exception WHEN OTHERS THEN raise_application_error(-20002,'unable to send the mail.'||SQLERRM); END; Begin if :new.incident_owner_id :old.incident_owner_id then sMsg := 'Erro ao buscar email do novo responsavel. '; select distinct nvl(fu.EMAIL_ADDRESS,'NO_EMAIL') ,fu.user_name into sSrcEmail ,sSrcName from jtf_rs_resource_extns jr , fnd_user fu where jr.user_id =
Re: [oracle_br] TRIGGER - ALTERNATIVA PARA ERRO TABLE TABLE_NAME IS MUTATING
Leonardo. Manda a trigger do jeito q esta construida hj fazendo favor. Abraço Alvaro Em 24/09/08, Leonardo Souza [EMAIL PROTECTED] escreveu: Bom dia srs, Estou construindo uma trigger na qual antes de atualizar/deletar um registro, tenho que dar um select na própria tabela que está sendo modificada, devido a executar joins em outras tabelas. Minha dúvida é: Como não posso executar uma instrução que necessito na tabela que está sendo alterada (ver erro abaixo), onde posso armazenar o registro em questão numa estrutura na qual possa dar joins em outras tabelas existentes??? Se eu colocar em um tipo de collection, posso fazer isto: ??? select t1.a, t1.b, t1.c, type_collection.a, type_collection.b from t1 inner join type_collection ERRO: -- UPDATE WEB.CLIENTES SET DAT_COMPRA = TO_DATE('21/02/08', 'DD/MM/RR') WHERE ROWID = 'AAAKVQAAQAABpu9AAN' One error saving changes to table WEB.CLIENTES: Row 1: ORA-04091: table WEB.CLIENTES is mutating, trigger/function may not see it ORA-06512: at WEB.TRG_CLIENTES, line 58 ORA-06512: at WEB.TRG_CLIENTES, line 204 ORA-04088: error during execution of trigger 'WEB.TRG_CLIENTES' -- Att, [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger com update.
Bom dia, Alvaro. Muito Obrigado pela ajuda, acabei de fazer as alterações na trigger, conforme você me passou e funcionou perfeitamente. Valeu mesmo. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil From: Alvaro Luiz Mansor Neto Sent: Monday, September 22, 2008 5:03 PM To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Trigger com update. Jean. Tudo bem? O código fica o seguinte: SQL CREATE TABLE NPS_PROGR_PROXIMA ( FIMPROGR NUMBER, INIPROGR NUMBER, lotenum NUMBER ); Table created SQL SQL CREATE OR REPLACE TRIGGER TGI_NPS_PROGR_PROXIMA_ATU_DATA 2 before UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA 3 FOR EACH ROW 4 begin 5 if :old.lotenum = :new.lotenum and ((:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr)) then 6 :new.fimprogr := :new.fimprogr; 7 :new.iniprogr := :new.iniprogr; 8 end if; 9 end; 10 / Trigger created SQL SQL insert into NPS_PROGR_PROXIMA values ( 1,2,5 ); 1 row inserted SQL commit; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM -- -- -- 1 2 5 SQL SQL update NPS_PROGR_PROXIMA set fimprogr = 9, INIPROGR = 8 where lotenum = 5; 1 row updated SQL COMMIT; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM -- -- -- 9 8 5 SQL SQL update NPS_PROGR_PROXIMA set fimprogr = 7, INIPROGR = 7 where lotenum = 7; 0 rows updated SQL COMMIT; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM -- -- -- 9 8 5 Abraço Alvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED] escreveu: Ai está.. está é a ultima que tentei rodar.. agora está dando erro de conflito de recurso por causa do pragma autonomous_transaction, mais pra dar tabela mutante só tirar o pragma. CREATE OR REPLACE TRIGGER CECRISA_MATRIZ.TGI_NPS_PROGR_PROXIMA_ATU_DATA AFTER UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update nps_progr_proxima set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:new.lotenum; end if; end; valeu Alvaro. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil From: Alvaro Luiz Mansor Neto Sent: Monday, September 22, 2008 3:37 PM To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Trigger com update. Jean. Manda a sintaxe do create or replace da trigger tb para eu poder te dar um help. Abraço ALvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED]jcthebrother%40hotmail.com escreveu: Tenho uma Trigger com o seguinte sql: begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update tabela set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:old.lotenum; end if; end; Essa trigger é acionada quando é atualizada um desses dois campos iniprogr ou fimprogr e presciso atualizar todos os registros que tem o mesmo lotenum do registro que estou atualizando. Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo registro que estou alterando correto? Teria como fazer esse sql tirando o registro corrente Ou como posso resolver esse problema da tabela mutante?? OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger com update.
Isso aí ... A trigger do jeito q estava estava errada pois o update é feito de outra maneira dentro de uma trigger como vc pôde observar. E dentro de uma trigger para não dar tabela mutante é só não referenciar no comando DML feito a tabela q a trigger esta referenciando ok ? Essa referencia já é implicita, ou seja, ela é feita automaticamente. Más precisando estamos aí. [ ]s Alvaro Em 24/09/08, Jean Carlo [EMAIL PROTECTED] escreveu: Bom dia, Alvaro. Muito Obrigado pela ajuda, acabei de fazer as alterações na trigger, conforme você me passou e funcionou perfeitamente. Valeu mesmo. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil From: Alvaro Luiz Mansor Neto Sent: Monday, September 22, 2008 5:03 PM To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Trigger com update. Jean. Tudo bem? O código fica o seguinte: SQL CREATE TABLE NPS_PROGR_PROXIMA ( FIMPROGR NUMBER, INIPROGR NUMBER, lotenum NUMBER ); Table created SQL SQL CREATE OR REPLACE TRIGGER TGI_NPS_PROGR_PROXIMA_ATU_DATA 2 before UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA 3 FOR EACH ROW 4 begin 5 if :old.lotenum = :new.lotenum and ((:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr)) then 6 :new.fimprogr := :new.fimprogr; 7 :new.iniprogr := :new.iniprogr; 8 end if; 9 end; 10 / Trigger created SQL SQL insert into NPS_PROGR_PROXIMA values ( 1,2,5 ); 1 row inserted SQL commit; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM -- -- -- 1 2 5 SQL SQL update NPS_PROGR_PROXIMA set fimprogr = 9, INIPROGR = 8 where lotenum = 5; 1 row updated SQL COMMIT; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM -- -- -- 9 8 5 SQL SQL update NPS_PROGR_PROXIMA set fimprogr = 7, INIPROGR = 7 where lotenum = 7; 0 rows updated SQL COMMIT; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGR LOTENUM -- -- -- 9 8 5 Abraço Alvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED]jcthebrother%40hotmail.com escreveu: Ai está.. está é a ultima que tentei rodar.. agora está dando erro de conflito de recurso por causa do pragma autonomous_transaction, mais pra dar tabela mutante só tirar o pragma. CREATE OR REPLACE TRIGGER CECRISA_MATRIZ.TGI_NPS_PROGR_PROXIMA_ATU_DATA AFTER UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update nps_progr_proxima set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:new.lotenum; end if; end; valeu Alvaro. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil From: Alvaro Luiz Mansor Neto Sent: Monday, September 22, 2008 3:37 PM To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.broracle_br% 40yahoogrupos.com.br Subject: Re: [oracle_br] Trigger com update. Jean. Manda a sintaxe do create or replace da trigger tb para eu poder te dar um help. Abraço ALvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED]jcthebrother%40hotmail.com jcthebrother%40hotmail.com escreveu: Tenho uma Trigger com o seguinte sql: begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update tabela set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:old.lotenum; end if; end; Essa trigger é acionada quando é atualizada um desses dois campos iniprogr ou fimprogr e presciso atualizar todos os registros que tem o mesmo lotenum do registro que estou atualizando. Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo registro que estou alterando correto? Teria como fazer esse sql tirando o registro corrente Ou como posso resolver esse problema da tabela mutante?? OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta
[oracle_br] TRIGGER - ALTERNATIVA PARA ERRO TABLE TABLE_NAME IS MUTATING
Bom dia srs, Estou construindo uma trigger na qual antes de atualizar/deletar um registro, tenho que dar um select na própria tabela que está sendo modificada, devido a executar joins em outras tabelas. Minha dúvida é: Como não posso executar uma instrução que necessito na tabela que está sendo alterada (ver erro abaixo), onde posso armazenar o registro em questão numa estrutura na qual possa dar joins em outras tabelas existentes??? Se eu colocar em um tipo de collection, posso fazer isto: ??? select t1.a, t1.b, t1.c, type_collection.a, type_collection.b from t1 inner join type_collection ERRO: - UPDATE WEB.CLIENTES SET DAT_COMPRA = TO_DATE('21/02/08', 'DD/MM/RR') WHERE ROWID = 'AAAKVQAAQAABpu9AAN' One error saving changes to table WEB.CLIENTES: Row 1: ORA-04091: table WEB.CLIENTES is mutating, trigger/function may not see it ORA-06512: at WEB.TRG_CLIENTES, line 58 ORA-06512: at WEB.TRG_CLIENTES, line 204 ORA-04088: error during execution of trigger 'WEB.TRG_CLIENTES' - Att, [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger com update.
Tenho uma Trigger com o seguinte sql: begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update tabela set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:old.lotenum; end if; end; Essa trigger é acionada quando é atualizada um desses dois campos iniprogr ou fimprogr e presciso atualizar todos os registros que tem o mesmo lotenum do registro que estou atualizando. Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo registro que estou alterando correto? Teria como fazer esse sql tirando o registro corrente Ou como posso resolver esse problema da tabela mutante?? OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger com update.
Jean. Manda a sintaxe do create or replace da trigger tb para eu poder te dar um help. Abraço ALvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED] escreveu: Tenho uma Trigger com o seguinte sql: begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update tabela set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:old.lotenum; end if; end; Essa trigger é acionada quando é atualizada um desses dois campos iniprogr ou fimprogr e presciso atualizar todos os registros que tem o mesmo lotenum do registro que estou atualizando. Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo registro que estou alterando correto? Teria como fazer esse sql tirando o registro corrente Ou como posso resolver esse problema da tabela mutante?? OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger com update.
Ai está.. está é a ultima que tentei rodar.. agora está dando erro de conflito de recurso por causa do pragma autonomous_transaction, mais pra dar tabela mutante só tirar o pragma. CREATE OR REPLACE TRIGGER CECRISA_MATRIZ.TGI_NPS_PROGR_PROXIMA_ATU_DATA AFTER UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update nps_progr_proxima set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:new.lotenum; end if; end; valeu Alvaro. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil From: Alvaro Luiz Mansor Neto Sent: Monday, September 22, 2008 3:37 PM To: oracle_br@yahoogrupos.com.br Subject: Re: [oracle_br] Trigger com update. Jean. Manda a sintaxe do create or replace da trigger tb para eu poder te dar um help. Abraço ALvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED] escreveu: Tenho uma Trigger com o seguinte sql: begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update tabela set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:old.lotenum; end if; end; Essa trigger é acionada quando é atualizada um desses dois campos iniprogr ou fimprogr e presciso atualizar todos os registros que tem o mesmo lotenum do registro que estou atualizando. Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo registro que estou alterando correto? Teria como fazer esse sql tirando o registro corrente Ou como posso resolver esse problema da tabela mutante?? OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger com update.
Jean. Tudo bem? O código fica o seguinte: SQL CREATE TABLE NPS_PROGR_PROXIMA ( FIMPROGR NUMBER, INIPROGR NUMBER, lotenum NUMBER ); Table created SQL SQL CREATE OR REPLACE TRIGGER TGI_NPS_PROGR_PROXIMA_ATU_DATA 2 before UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA 3 FOR EACH ROW 4 begin 5 if :old.lotenum = :new.lotenum and ((:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr)) then 6:new.fimprogr := :new.fimprogr; 7:new.iniprogr := :new.iniprogr; 8 end if; 9 end; 10 / Trigger created SQL SQL insert into NPS_PROGR_PROXIMA values ( 1,2,5 ); 1 row inserted SQL commit; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGRLOTENUM -- -- -- 1 2 5 SQL SQL update NPS_PROGR_PROXIMA set fimprogr = 9, INIPROGR = 8 where lotenum = 5; 1 row updated SQL COMMIT; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGRLOTENUM -- -- -- 9 8 5 SQL SQL update NPS_PROGR_PROXIMA set fimprogr = 7, INIPROGR = 7 where lotenum = 7; 0 rows updated SQL COMMIT; Commit complete SQL select * from NPS_PROGR_PROXIMA; FIMPROGR INIPROGRLOTENUM -- -- -- 9 8 5 Abraço Alvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED] escreveu: Ai está.. está é a ultima que tentei rodar.. agora está dando erro de conflito de recurso por causa do pragma autonomous_transaction, mais pra dar tabela mutante só tirar o pragma. CREATE OR REPLACE TRIGGER CECRISA_MATRIZ.TGI_NPS_PROGR_PROXIMA_ATU_DATA AFTER UPDATE OF FIMPROGR, INIPROGR ON NPS_PROGR_PROXIMA FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update nps_progr_proxima set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:new.lotenum; end if; end; valeu Alvaro. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil From: Alvaro Luiz Mansor Neto Sent: Monday, September 22, 2008 3:37 PM To: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br Subject: Re: [oracle_br] Trigger com update. Jean. Manda a sintaxe do create or replace da trigger tb para eu poder te dar um help. Abraço ALvaro Em 22/09/08, Jean Carlo [EMAIL PROTECTED]jcthebrother%40hotmail.com escreveu: Tenho uma Trigger com o seguinte sql: begin if (:new.fimprogr :old.fimprogr) or (:new.iniprogr :old.iniprogr) then update tabela set fimprogr=:new.fimprogr, iniprogr=:new.iniprogr where lotenum=:old.lotenum; end if; end; Essa trigger é acionada quando é atualizada um desses dois campos iniprogr ou fimprogr e presciso atualizar todos os registros que tem o mesmo lotenum do registro que estou atualizando. Porem qdo aciono o mesmo dá erro de tabela mutante pois atualiza o mesmo registro que estou alterando correto? Teria como fazer esse sql tirando o registro corrente Ou como posso resolver esse problema da tabela mutante?? OBS.: tentei utilizar o pragma autonomous_transaction mais não funcionou. -- att, Jean Carlo Stein da Fonseca Programador PL/SQL e Forms/Reports 6i Oracle. DBA Oracle Jr. em busca do OCA. Consultor Oracle Cecrisa/Portinari www.cecrisa.com.br +55 (48) 9604-6138 Criciúma, Santa Catarina - Brasil [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Trigger after logon
Galera. Estou tentanto usar uma trigger aftor logon para limitar acessos ao banco. Mas não esta dando certo. O que estou fazendo de errado? create or replace trigger TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger after logon
Boa tarde Bruno, SELECT Upper(Module) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); Na boa, program pode ser mudado por um simples rename no EXE, um usuário mais malandrinho faz bypass nisso mole. create or replace trigger SYS.TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 14:49:13 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: [oracle_br] Trigger after logon Galera. Estou tentanto usar uma trigger aftor logon para limitar acessos ao banco. Mas não esta dando certo. O que estou fazendo de errado? create or replace trigger TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Funções, Procedures, propostas de emprego - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ Links do Yahoo! Grupos Na Oi Internet você ganha ou ganha. Além de acesso grátis com qualidade, você pode ter contas ilimitadas de email com 1 giga cada uma, suporte grátis e muito mais. Baixe grátis o Discador Oi em http://www.oi.com.br/discador e comece a ganhar. Agora, se o seu negócio é voar alto na internet, assine Oi Internet Banda Larga e ganhe o modem grátis. Clique em http://www.oi.com.br/bandalarga e aproveite essa moleza!
Re: [oracle_br] Trigger after logon
Rodrigo. Obrigado pela atenção, mas no meu caso, não preciso se preocupar com esse mudança no nome do exe. E mesmo criando a triggre para o SYS não deu certo. Eu criei um log na triggre, ele entra nela, faz o select certo, retorna o valor correto e entra no if, mas por algum motivo ele não dar o erro e nem corta a conexão. Valeu. Bruno Fantin. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:00 PM Subject: Re: [oracle_br] Trigger after logon Boa tarde Bruno, SELECT Upper(Module) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); Na boa, program pode ser mudado por um simples rename no EXE, um usuário mais malandrinho faz bypass nisso mole. create or replace trigger SYS.TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 14:49:13 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: [oracle_br] Trigger after logon Galera. Estou tentanto usar uma trigger aftor logon para limitar acessos ao banco. Mas não esta dando certo. O que estou fazendo de errado? create or replace trigger TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- Funções, Procedures, propostas de emprego - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ -- Links do Yahoo! Grupos -- Na Oi Internet você ganha ou ganha. Além de acesso grátis com qualidade, você pode ter contas ilimitadas de email com 1 giga cada uma, suporte grátis e muito mais. Baixe grátis o Discador Oi em http://www.oi.com.br/discador e comece a ganhar. Agora, se o seu negócio é voar alto na internet, assine Oi Internet Banda Larga e ganhe o modem grátis. Clique em http://www.oi.com.br/bandalarga e aproveite essa moleza! [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger after logon
Bruno, Aqui tem uma pronta, acho que na sua só falta um exception, essa manda e-mail para vc caso alguém esteja tentando acesso. CREATE OR REPLACE TRIGGER SYS.user_login_trig AFTER LOGON ON DATABASE DECLARE v_username SYS.gv_$session.username%TYPE; v_machineSYS.gv_$session.machine%TYPE; v_commandSYS.gv_$session.command%TYPE; v_programSYS.gv_$session.program%TYPE; v_osuser SYS.gv_$session.osuser%TYPE; v_module SYS.gv_$session.module%TYPE; v_hora NUMBER; v_sidSYS.gv_$session.SID%TYPE; v_serial#SYS.gv_$session.serial#%TYPE; v_string varchar2(1000); v_connutl_smtp.connection; v_crlfvarchar2 (2) := chr (13) || chr (10); v_mesgvarchar2 (1000); v_instanceSYS.v_$instance.INSTANCE_NAME%TYPE; BEGIN SELECT instance_name into v_instance from SYS.v_$instance; SELECT username, machine, NVL (command, '0'), NVL (program, 'OAS10G'), TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')), NVL (osuser, 'OAS10G'), MODULE, SID, serial# INTO v_username, v_machine, v_command, v_program, v_hora, v_osuser, v_module, v_sid, v_serial# FROM SYS.gv_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF ( v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email v_conn := utl_smtp.open_connection ('ip_seu_servidor_correio', 25); utl_smtp.helo (v_conn, 'ip_seu_servidor_correio'); utl_smtp.mail (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); v_mesg := 'Date: ' || to_char (sysdate, 'dd Mon yy hh24:mi:ss') || v_crlf || 'From: Mufalani [EMAIL PROTECTED] ' || v_crlf || 'Subject: Tentativa de acesso a base de dados' || v_crlf || '' || v_crlf || '***' || '' || v_crlf || ' O usuário ' || v_osuser|| '/'|| v_username|| ' tentou acesso a base de dados da máquina '|| v_machine || '' || v_crlf || ' com o programa '|| v_program || '' || v_crlf || ' na instancia '|| v_instance || '' || v_crlf || ' Como ele nao deveria ter acesso foi negado!!! ' || v_crlf || '' || v_crlf || 'Atenciosamente,' || v_crlf || 'Mufalani' || v_crlf || '***'; utl_smtp.data (v_conn, v_mesg); utl_smtp.quit (v_conn); raise_application_error (-2, 'Não é permitido o acesso usando este aplicativo!' ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:06:18 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo. Obrigado pela atenção, mas no meu caso, não preciso se preocupar com esse mudança no nome do exe. E mesmo criando a triggre para o SYS não deu certo. Eu criei um log na triggre, ele entra nela, faz o select certo, retorna o valor correto e entra no if, mas por algum motivo ele não dar o erro e nem corta a conexão. Valeu. Bruno Fantin. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:00 PM Subject: Re: [oracle_br] Trigger after logon Boa tarde Bruno, SELECT Upper(Module) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); Na boa, program pode ser mudado por um simples rename no EXE, um usuário mais malandrinho faz bypass nisso mole. create or replace trigger SYS.TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 14:49:13 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: [oracle_br] Trigger after logon Galera. Estou tentanto usar uma trigger aftor logon para limitar acessos ao banco. Mas não esta dando certo. O que estou fazendo de errado? create or replace trigger TRG_TESTE after logon on database declare Programa varchar2(100
Re: [oracle_br] Trigger after logon
Rodrigo Com você essa triggre funciona? Eu implantei ele dessa mesma forma, recebi o email mais ele não bloqueou o programa e nem retornou nenhuma mensagem por programa. Só para constar. O banco é o 10g 10.2.0.4.0 standard e a aplicação que estou testando foi criada por mim mesmo, ele somente abre a conexão com o banco e faz um select simples. Falou. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:18 PM Subject: Re: [oracle_br] Trigger after logon Bruno, Aqui tem uma pronta, acho que na sua só falta um exception, essa manda e-mail para vc caso alguém esteja tentando acesso. CREATE OR REPLACE TRIGGER SYS.user_login_trig AFTER LOGON ON DATABASE DECLARE v_username SYS.gv_$session.username%TYPE; v_machine SYS.gv_$session.machine%TYPE; v_command SYS.gv_$session.command%TYPE; v_program SYS.gv_$session.program%TYPE; v_osuser SYS.gv_$session.osuser%TYPE; v_module SYS.gv_$session.module%TYPE; v_hora NUMBER; v_sid SYS.gv_$session.SID%TYPE; v_serial# SYS.gv_$session.serial#%TYPE; v_string varchar2(1000); v_conn utl_smtp.connection; v_crlf varchar2 (2) := chr (13) || chr (10); v_mesg varchar2 (1000); v_instance SYS.v_$instance.INSTANCE_NAME%TYPE; BEGIN SELECT instance_name into v_instance from SYS.v_$instance; SELECT username, machine, NVL (command, '0'), NVL (program, 'OAS10G'), TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')), NVL (osuser, 'OAS10G'), MODULE, SID, serial# INTO v_username, v_machine, v_command, v_program, v_hora, v_osuser, v_module, v_sid, v_serial# FROM SYS.gv_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF ( v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email v_conn := utl_smtp.open_connection ('ip_seu_servidor_correio', 25); utl_smtp.helo (v_conn, 'ip_seu_servidor_correio'); utl_smtp.mail (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); v_mesg := 'Date: ' || to_char (sysdate, 'dd Mon yy hh24:mi:ss') || v_crlf || 'From: Mufalani [EMAIL PROTECTED] ' || v_crlf || 'Subject: Tentativa de acesso a base de dados' || v_crlf || '' || v_crlf || '***' || '' || v_crlf || ' O usuário ' || v_osuser|| '/'|| v_username|| ' tentou acesso a base de dados da máquina '|| v_machine || '' || v_crlf || ' com o programa '|| v_program || '' || v_crlf || ' na instancia '|| v_instance || '' || v_crlf || ' Como ele nao deveria ter acesso foi negado!!! ' || v_crlf || '' || v_crlf || 'Atenciosamente,' || v_crlf || 'Mufalani' || v_crlf || '***'; utl_smtp.data (v_conn, v_mesg); utl_smtp.quit (v_conn); raise_application_error (-2, 'Não é permitido o acesso usando este aplicativo!' ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:06:18 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo. Obrigado pela atenção, mas no meu caso, não preciso se preocupar com esse mudança no nome do exe. E mesmo criando a triggre para o SYS não deu certo. Eu criei um log na triggre, ele entra nela, faz o select certo, retorna o valor correto e entra no if, mas por algum motivo ele não dar o erro e nem corta a conexão. Valeu. Bruno Fantin. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:00 PM Subject: Re: [oracle_br] Trigger after logon Boa tarde Bruno, SELECT Upper(Module) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); Na boa, program pode ser mudado por um simples rename no EXE, um usuário mais malandrinho faz bypass nisso mole. create or replace trigger SYS.TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 14:49:13 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: [oracle_br] Trigger after logon Galera. Estou tentanto usar uma trigger aftor logon para limitar acessos ao banco. Mas não esta dando certo. O que estou fazendo de errado? create or replace
Re: [oracle_br] Trigger after logon
Descobrir porque não funciona. Se o usuario for da rule DBA ela não funciona. http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:1844531724208 - Original Message - From: Bruno Fantin To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:48 PM Subject: Re: [oracle_br] Trigger after logon Rodrigo Com você essa triggre funciona? Eu implantei ele dessa mesma forma, recebi o email mais ele não bloqueou o programa e nem retornou nenhuma mensagem por programa. Só para constar. O banco é o 10g 10.2.0.4.0 standard e a aplicação que estou testando foi criada por mim mesmo, ele somente abre a conexão com o banco e faz um select simples. Falou. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:18 PM Subject: Re: [oracle_br] Trigger after logon Bruno, Aqui tem uma pronta, acho que na sua só falta um exception, essa manda e-mail para vc caso alguém esteja tentando acesso. CREATE OR REPLACE TRIGGER SYS.user_login_trig AFTER LOGON ON DATABASE DECLARE v_username SYS.gv_$session.username%TYPE; v_machine SYS.gv_$session.machine%TYPE; v_command SYS.gv_$session.command%TYPE; v_program SYS.gv_$session.program%TYPE; v_osuser SYS.gv_$session.osuser%TYPE; v_module SYS.gv_$session.module%TYPE; v_hora NUMBER; v_sid SYS.gv_$session.SID%TYPE; v_serial# SYS.gv_$session.serial#%TYPE; v_string varchar2(1000); v_conn utl_smtp.connection; v_crlf varchar2 (2) := chr (13) || chr (10); v_mesg varchar2 (1000); v_instance SYS.v_$instance.INSTANCE_NAME%TYPE; BEGIN SELECT instance_name into v_instance from SYS.v_$instance; SELECT username, machine, NVL (command, '0'), NVL (program, 'OAS10G'), TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')), NVL (osuser, 'OAS10G'), MODULE, SID, serial# INTO v_username, v_machine, v_command, v_program, v_hora, v_osuser, v_module, v_sid, v_serial# FROM SYS.gv_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF ( v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email v_conn := utl_smtp.open_connection ('ip_seu_servidor_correio', 25); utl_smtp.helo (v_conn, 'ip_seu_servidor_correio'); utl_smtp.mail (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); v_mesg := 'Date: ' || to_char (sysdate, 'dd Mon yy hh24:mi:ss') || v_crlf || 'From: Mufalani [EMAIL PROTECTED] ' || v_crlf || 'Subject: Tentativa de acesso a base de dados' || v_crlf || '' || v_crlf || '***' || '' || v_crlf || ' O usuário ' || v_osuser|| '/'|| v_username|| ' tentou acesso a base de dados da máquina '|| v_machine || '' || v_crlf || ' com o programa '|| v_program || '' || v_crlf || ' na instancia '|| v_instance || '' || v_crlf || ' Como ele nao deveria ter acesso foi negado!!! ' || v_crlf || '' || v_crlf || 'Atenciosamente,' || v_crlf || 'Mufalani' || v_crlf || '***'; utl_smtp.data (v_conn, v_mesg); utl_smtp.quit (v_conn); raise_application_error (-2, 'Não é permitido o acesso usando este aplicativo!' ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:06:18 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo. Obrigado pela atenção, mas no meu caso, não preciso se preocupar com esse mudança no nome do exe. E mesmo criando a triggre para o SYS não deu certo. Eu criei um log na triggre, ele entra nela, faz o select certo, retorna o valor correto e entra no if, mas por algum motivo ele não dar o erro e nem corta a conexão. Valeu. Bruno Fantin. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:00 PM Subject: Re: [oracle_br] Trigger after logon Boa tarde Bruno, SELECT Upper(Module) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); Na boa, program pode ser mudado por um simples rename no EXE, um usuário mais malandrinho faz bypass nisso mole. create or replace trigger SYS.TRG_TESTE after logon on database declare Programa varchar2(100); begin SELECT Upper(Program) INTO Programa FROM V$SESSION WHERE AUDSID = USERENV('sessionid'); if Programa = 'TESTE.EXE' then raise_application_error(-20001, 'Não pode entrar'); end if; end; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED
Re: [oracle_br] Trigger after logon
Meu caro... Aí é de acordo com o teste IF (v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email No meu caso eu faço teste no usuário e no módulo como eu havia lhe falado quando você se conecta via sqlplus e faz o select da trigger o que aparece como o EXE logado aparece o que? Se não tivesse funcionando, com certeza não iria mandar para o fórum. Eu só alterei os dados para não divulgar dados da empresa, mas essa trigger está em produção e funciona sem problemas para o que eu quero. Acabei de realizar um teste... e recebí isso pelo sqlplus por exemplo. ORA-00604: error ocurred at recursive SQL level 1 ORA-2: Não é permitido o acesso usando este aplicativo! ORA-06512: at line 80 Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:48:53 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo Com você essa triggre funciona? Eu implantei ele dessa mesma forma, recebi o email mais ele não bloqueou o programa e nem retornou nenhuma mensagem por programa. Só para constar. O banco é o 10g 10.2.0.4.0 standard e a aplicação que estou testando foi criada por mim mesmo, ele somente abre a conexão com o banco e faz um select simples. Falou. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:18 PM Subject: Re: [oracle_br] Trigger after logon Bruno, Aqui tem uma pronta, acho que na sua só falta um exception, essa manda e-mail para vc caso alguém esteja tentando acesso. CREATE OR REPLACE TRIGGER SYS.user_login_trig AFTER LOGON ON DATABASE DECLARE v_username SYS.gv_$session.username%TYPE; v_machine SYS.gv_$session.machine%TYPE; v_command SYS.gv_$session.command%TYPE; v_program SYS.gv_$session.program%TYPE; v_osuser SYS.gv_$session.osuser%TYPE; v_module SYS.gv_$session.module%TYPE; v_hora NUMBER; v_sid SYS.gv_$session.SID%TYPE; v_serial# SYS.gv_$session.serial#%TYPE; v_string varchar2(1000); v_conn utl_smtp.connection; v_crlf varchar2 (2) := chr (13) || chr (10); v_mesg varchar2 (1000); v_instance SYS.v_$instance.INSTANCE_NAME%TYPE; BEGIN SELECT instance_name into v_instance from SYS.v_$instance; SELECT username, machine, NVL (command, '0'), NVL (program, 'OAS10G'), TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')), NVL (osuser, 'OAS10G'), MODULE, SID, serial# INTO v_username, v_machine, v_command, v_program, v_hora, v_osuser, v_module, v_sid, v_serial# FROM SYS.gv_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF ( v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email v_conn := utl_smtp.open_connection ('ip_seu_servidor_correio', 25); utl_smtp.helo (v_conn, 'ip_seu_servidor_correio'); utl_smtp.mail (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); v_mesg := 'Date: ' || to_char (sysdate, 'dd Mon yy hh24:mi:ss') || v_crlf || 'From: Mufalani [EMAIL PROTECTED] ' || v_crlf || 'Subject: Tentativa de acesso a base de dados' || v_crlf || '' || v_crlf || '***' || '' || v_crlf || ' O usuário ' || v_osuser|| '/'|| v_username|| ' tentou acesso a base de dados da máquina '|| v_machine || '' || v_crlf || ' com o programa '|| v_program || '' || v_crlf || ' na instancia '|| v_instance || '' || v_crlf || ' Como ele nao deveria ter acesso foi negado!!! ' || v_crlf || '' || v_crlf || 'Atenciosamente,' || v_crlf || 'Mufalani' || v_crlf || '***'; utl_smtp.data (v_conn, v_mesg); utl_smtp.quit (v_conn); raise_application_error (-2, 'Não é permitido o acesso usando este aplicativo!' ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:06:18 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo. Obrigado pela atenção, mas no meu caso, não preciso se preocupar com esse mudança no nome do exe. E mesmo criando a triggre para o SYS não deu certo. Eu criei um log na triggre, ele entra nela, faz o select certo, retorna o valor correto e entra no if, mas por algum motivo ele não dar o erro e nem corta a conexão. Valeu. Bruno Fantin. - Original Message - From: Rodrigo
Re: [oracle_br] Trigger after logon
Rodrigo. Muito obrigado pela ajuda, mais como mandei no email anterior, o problema é com o usuário que é DBA. Sem mais. Bruno Fantin. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 5:35 PM Subject: Re: [oracle_br] Trigger after logon Meu caro... Aí é de acordo com o teste IF (v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email No meu caso eu faço teste no usuário e no módulo como eu havia lhe falado quando você se conecta via sqlplus e faz o select da trigger o que aparece como o EXE logado aparece o que? Se não tivesse funcionando, com certeza não iria mandar para o fórum. Eu só alterei os dados para não divulgar dados da empresa, mas essa trigger está em produção e funciona sem problemas para o que eu quero. Acabei de realizar um teste... e recebí isso pelo sqlplus por exemplo. ORA-00604: error ocurred at recursive SQL level 1 ORA-2: Não é permitido o acesso usando este aplicativo! ORA-06512: at line 80 Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:48:53 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo Com você essa triggre funciona? Eu implantei ele dessa mesma forma, recebi o email mais ele não bloqueou o programa e nem retornou nenhuma mensagem por programa. Só para constar. O banco é o 10g 10.2.0.4.0 standard e a aplicação que estou testando foi criada por mim mesmo, ele somente abre a conexão com o banco e faz um select simples. Falou. - Original Message - From: Rodrigo Mufalani To: oracle_br@yahoogrupos.com.br Sent: Tuesday, September 16, 2008 3:18 PM Subject: Re: [oracle_br] Trigger after logon Bruno, Aqui tem uma pronta, acho que na sua só falta um exception, essa manda e-mail para vc caso alguém esteja tentando acesso. CREATE OR REPLACE TRIGGER SYS.user_login_trig AFTER LOGON ON DATABASE DECLARE v_username SYS.gv_$session.username%TYPE; v_machine SYS.gv_$session.machine%TYPE; v_command SYS.gv_$session.command%TYPE; v_program SYS.gv_$session.program%TYPE; v_osuser SYS.gv_$session.osuser%TYPE; v_module SYS.gv_$session.module%TYPE; v_hora NUMBER; v_sid SYS.gv_$session.SID%TYPE; v_serial# SYS.gv_$session.serial#%TYPE; v_string varchar2(1000); v_conn utl_smtp.connection; v_crlf varchar2 (2) := chr (13) || chr (10); v_mesg varchar2 (1000); v_instance SYS.v_$instance.INSTANCE_NAME%TYPE; BEGIN SELECT instance_name into v_instance from SYS.v_$instance; SELECT username, machine, NVL (command, '0'), NVL (program, 'OAS10G'), TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')), NVL (osuser, 'OAS10G'), MODULE, SID, serial# INTO v_username, v_machine, v_command, v_program, v_hora, v_osuser, v_module, v_sid, v_serial# FROM SYS.gv_$session WHERE audsid = USERENV ('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF ( v_username = 'USUARIO_SUA_APPS' AND UPPER(v_module) = 'TESTE.EXE') THEN -- Bloqueia conexão e envia email v_conn := utl_smtp.open_connection ('ip_seu_servidor_correio', 25); utl_smtp.helo (v_conn, 'ip_seu_servidor_correio'); utl_smtp.mail (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); utl_smtp.rcpt (v_conn, '[EMAIL PROTECTED]'); v_mesg := 'Date: ' || to_char (sysdate, 'dd Mon yy hh24:mi:ss') || v_crlf || 'From: Mufalani [EMAIL PROTECTED] ' || v_crlf || 'Subject: Tentativa de acesso a base de dados' || v_crlf || '' || v_crlf || '***' || '' || v_crlf || ' O usuário ' || v_osuser|| '/'|| v_username|| ' tentou acesso a base de dados da máquina '|| v_machine || '' || v_crlf || ' com o programa '|| v_program || '' || v_crlf || ' na instancia '|| v_instance || '' || v_crlf || ' Como ele nao deveria ter acesso foi negado!!! ' || v_crlf || '' || v_crlf || 'Atenciosamente,' || v_crlf || 'Mufalani' || v_crlf || '***'; utl_smtp.data (v_conn, v_mesg); utl_smtp.quit (v_conn); raise_application_error (-2, 'Não é permitido o acesso usando este aplicativo!' ); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / Atenciosamente, Rodrigo Mufalani OCP 10g 11g [EMAIL PROTECTED] http://mufalani.blogspot.com Mensagem Original: Data: 15:06:18 16/09/2008 De: Bruno Fantin [EMAIL PROTECTED] Assunto: Re: [oracle_br] Trigger after logon Rodrigo. Obrigado pela atenção, mas no meu caso, não preciso se preocupar
[oracle_br] Trigger não Inseri Registros
Pessoal, preciso de uma ajuda meio urgente, criei uma trigger assim: create or replace trigger trg_wms_item_complemento_emp after insert on wms_item_complemento for each row begin if :new.empresa='01' then insert into wms_item_complemento values ( '10', :new.ITEM, :new.DEPOSIT, :new.ITEM_DEPOSIT, :new.CLASSIF_ABC, :new.CLASSIF_PERMANENTE, :new.COD_ONU, :new.CLASSE_RISCO, :new.SCLASSE_RISCO, :new.PERMITE_PALETE_MISTO, :new.UTILIZA_EQPTO_PICKING_AUTOM, :new.PERMITE_CONVERSAO_UNID_MEDIDA, :new.CONTROLE_EXERCITO, :new.CONTROLE_POLICIA_FEDERAL, :new.UNID_MEDIDA_FRACION, :new.CAT_ITEM, :new.QTD_DIA_PRAZO_VALID, :new.QTD_DIA_PRAZO_MAXIMO_RECEBTO, :new.QTD_DIA_PRAZO_ALARME_VALID, :new.SIT_BLOQUEIO_ITEM, :new.MANTER_SKU_ORIGINAL_PICKING, :new.IDENTIF_LOTE, :new.IDENTIF_SERIE, :new.IDENTIF_PECA, :new.IDENTIF_DAT_VALID, :new.IDENTIF_DAT_PRODUCAO, :new.PERMITE_SAI_FIS_NREGULARIZADA, :new.CONTROLE_POLICIA_MILITAR); insert into wms_item_complemento values ( '20', :new.ITEM, :new.DEPOSIT, :new.ITEM_DEPOSIT, :new.CLASSIF_ABC, :new.CLASSIF_PERMANENTE, :new.COD_ONU, :new.CLASSE_RISCO, :new.SCLASSE_RISCO, :new.PERMITE_PALETE_MISTO, :new.UTILIZA_EQPTO_PICKING_AUTOM, :new.PERMITE_CONVERSAO_UNID_MEDIDA, :new.CONTROLE_EXERCITO, :new.CONTROLE_POLICIA_FEDERAL, :new.UNID_MEDIDA_FRACION, :new.CAT_ITEM, :new.QTD_DIA_PRAZO_VALID, :new.QTD_DIA_PRAZO_MAXIMO_RECEBTO, :new.QTD_DIA_PRAZO_ALARME_VALID, :new.SIT_BLOQUEIO_ITEM, :new.MANTER_SKU_ORIGINAL_PICKING, :new.IDENTIF_LOTE, :new.IDENTIF_SERIE, :new.IDENTIF_PECA, :new.IDENTIF_DAT_VALID, :new.IDENTIF_DAT_PRODUCAO, :new.PERMITE_SAI_FIS_NREGULARIZADA, :new.CONTROLE_POLICIA_MILITAR); commit; end if; dbms_output.put_line(:new.empresa); exception when others then dbms_output.put_line('DEU ERRADO!'); end; porém, quando rodo: insert into wms_item_complemento values ('01','156','068446103000113','156','A','N','','','','N','N',' N','N','N','N','0','','','',0,'S','','','','','','N','N'); onde o primeiro campo é o campo da empresa, ele não inseri os dois registros que a trigger deveria inserir, alguém tem alguma dica? é uma trigger que deve inserir linhas na própria tabela que a dispara.
Re: [oracle_br] trigger em sql server
Você pode utilizar os recursos de FGA (fine-grained auditing), dá uma olhada em: http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/auditing.htm#DBSEG525 Lá já tem muita coisa de exemplo, e isso é bastante poderoso, se quiser pode até fazer auditoria em selects com cláusulas específicas. 2008/7/3 Eduardo [EMAIL PROTECTED]: Seria melhor você especificar a pergunta, senão não dá para entender o que você quer. - Original Message - From: fabiana_lopes123 To: oracle_br@yahoogrupos.com.br Sent: Wednesday, July 02, 2008 3:09 PM Subject: [oracle_br] trigger em sql server Boa tarde a todos, Eu estou tentando fazer um trigger para auditoria em uma tabela, porém não achei comando equivalente ao deleting e ao inserting. Se alguem puder me ajudar eu agradeço. Obrigada =] -- No virus found in this incoming message. Checked by AVG. Version: 7.5.526 / Virus Database: 270.4.3/1524 - Release Date: 28/6/2008 19:42 [As partes desta mensagem que não continham texto foram removidas] -- Rosivaldo Azevedo Ramalho mail/msn: [EMAIL PROTECTED] web: http://rosivaldo.goodiez.net +55 83 8893 8281