Problemas ao inserir dados no banco(nome da mÁquina)

4 respostas
D

Boa Tarde,

Seguinte,

estou tentando fazer um insert via jdbc,

"insert into dados values ( sq_dados.nextval, '" + pon + "','"
				+ rpon + "','" + numeroAtual + "','" + numeroNovo + "','"
				+ processo + "','" + descricao + "','" + controle
				+ "', SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'))"

só que neste último campo, que eu coloco o sys_context,
quando eu faço select na tabela, mostra 'unknown'
se eu tento fazer o insert diretamente pelo banco, ele coloca o nome certo da máquina,

ai, pensei em fazer um trigger que faça isso para mim

CREATE OR REPLACE TRIGGER gvt_trg_insere_maquina
   BEFORE INSERT
   ON dados
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   maquina   VARCHAR (50);
BEGIN
   SELECT SYS_CONTEXT ('USERENV', 'TERMINAL')
     INTO maquina
     FROM DUAL;

   UPDATE dados
      SET terminal = maquina
    WHERE ID_DADO = :NEW.ID_DADO;
END;
/

mas o problema é que ela compila corretamente,
mas na hora que eu vou ver os registros está exatamente igual, ou seja,

ela não está fazendo nada....

gostaria de uma luz!

Abraços,
Leonardo De Bona

4 Respostas

lucao

Amigo, é bom saber qual o banco.
Pela sintaxe imagino que seja Oracle não é ?
E outra coisa não concatene a SQL.

Agora quanto ao assunto, quando você vai pelo servidor de aplicação ele realmente não consegue pegar o terminal, fica como unknown. Você vai conseguir pegar a maquina procurando na V$Session, na coluna MACHINE.
Mas todas vão vir com o mesmo nome já que todas vêm do servidor de aplicação.

D

é oracle msm…

eu tentei usar a V$Session,

quando eu executava o select não tinha problemas,
mas quando executava a trigger dava pau…

eu pensei que era pq a role tinha acesso a essa tabela, não meu usuário,

dei um grant para select e o problema persistiu,

ae eu usei o sys_context,

eu já verifiquei, ele busca corretamente a máquina,

o problema, não sei pq, é no update…

aguardo mais ajuda e obrigado!!!

lucao

Mas qual era esse erro que você disse que dava com a trigger ?

D

Cara,

era erro de grant msm,
só que eu não estou conseguindo ver o motivo pelo qual não está alterando nada
essa trigger,

olha o código com a v$session

CREATE OR REPLACE TRIGGER gvt_trg_insere_maquina

BEFORE INSERT

ON dados

FOR EACH ROW

DECLARE

maquina   VARCHAR (100);

usuario   VARCHAR (100);

BEGIN

SELECT osuser, LTRIM (program) || #’ || RTRIM (machine)

INTO usuario, maquina

FROM v$session

WHERE audsid = USERENV (‘SESSIONID’)

AND SID = (SELECT MAX (SID)

FROM v$session

WHERE audsid = USERENV (‘SESSIONID’));
UPDATE dados

SET terminal = maquina,

login = usuario

WHERE pon = :NEW.pon;

END;

/

esse update, parece não estar sendo efetuado…

Criado 4 de março de 2009
Ultima resposta 5 de mar. de 2009
Respostas 4
Participantes 2