ORA-04089: não é possível criar gatilhos nos objetos possuídos por SYS

Oracle

19/08/2013

Pessoal, estou tentando rodar este SQL no SQL Manager for Oracle

CREATE OR REPLACE TRIGGER "TABELA_X_0"
BEFORE UPDATE ON TABELA_X
FOR EACH ROW
BEGIN
if (old.CAMPOX = new.CAMPOX) then
begin
SET new.CAMPOX = 'F';
end
END;

e me aparece a seguinte mensagem

"ORA-04089: não é possível criar gatilhos nos objetos possuídos por SYS"

Já verifiquei utilizar o comando abaixo, antes da execução

GRANT ALL ON TABELA_X TO USUARIOX;

mas não obtive sucesso.

Agradeço qualquer dica, pois estou iniciando em Oracle.

Grato
Alessandro Yamasaki

Alessandro Yamasaki

Curtidas 0

Respostas

Deivison Melo

Deivison Melo

19/08/2013

Quando criou o seu banco de dados você criou algum schema difernte do schema: Sys ?

O Oracle nos orienta a cria já sem sua instalação...

Uma outra coisa é que sempre que for criar objetos sempre utilize o nome do schema como prefixo:

CREATE OR REPLACE TRIGGER TESTE.TABELA_X_0 -- usei o teste com nome de schema
BEFORE UPDATE ON TABELA_X
FOR EACH ROW
BEGIN
if (old.CAMPOX = new.CAMPOX) then
begin
SET new.CAMPOX = 'F';
end
END;

Dá uma olhada nos links abaixo que vc entenderá melhor:

http://aprenderoracle.com/2011/03/13bancodedados/

http://docs.oracle.com/cd/B19306_01/server.102/b14220/schema.htm
GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

19/08/2013

Ola Deivison

Sim, existem outros Schemas, mas como eu peguei o barco andando, estou me virando. Tentei criar fazendo referencia ao Schema, como vc citou, mas a mensagem é a mesma.
Estarei lendo seus links.

Só para constatar, mudei a trigger para qualquer exemplo da internet:


CREATE OR REPLACE TRIGGER "TG_TESTES"
BEFORE UPDATE ON tabelax
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
IF TO_NUMBER (TO_CHAR (SYSDATE, "hh24")) NOT BETWEEN 9 AND 18
THEN
raise_application_error(-20001,"Operação não pode ser executada fora do horário de expediente.");
END IF;
END;
/


Agora, dá outro erro.

PLS-00114: Identificador "Operador nao pode ser execu" extenso demais

Não entendi.

Obrigado pela atenção
GOSTEI 0
Deivison Melo

Deivison Melo

19/08/2013

CREATE OR REPLACE TRIGGER schema.TG_TESTES
BEFORE UPDATE ON schema.suatabela
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
IF TO_NUMBER (TO_CHAR (SYSDATE, 'hh24')) NOT BETWEEN 9 AND 18
THEN
raise_application_error(-20001,'Operação não pode ser executada fora do horário de expediente.');
END IF;
END;
/


Mudei dessa forma e conseguir criar!!

Problema he que estava com duas aspas ('') ao invés de uma (').
GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

19/08/2013

Valeu Deivison

Apagando de outros SQL´s, mas grato pela atenção.

topico encerrado
GOSTEI 0
Deivison Melo

Deivison Melo

19/08/2013

Ok, qualquer dúvida estamos por aqui!!

Abração e boa tarde!

GOSTEI 0
POSTAR