ORA-04089: não é possível criar gatilhos nos objetos possuídos por SYS
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
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
Curtidas 0
Respostas
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
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
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
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
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 (').
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
19/08/2013
Valeu Deivison
Apagando de outros SQL´s, mas grato pela atenção.
topico encerrado
Apagando de outros SQL´s, mas grato pela atenção.
topico encerrado
GOSTEI 0
Deivison Melo
19/08/2013
Ok, qualquer dúvida estamos por aqui!!
Abração e boa tarde!
Abração e boa tarde!
GOSTEI 0