Sou novo em bancos de dados e sei que esta é uma pergunta simples, mas não consigo encontrar uma resposta em lugar nenhum, por isso agradeço a ajuda.
Tenho 2 tabelas, cada uma com a mesma estrutura.
Table1
CaseNum Number(9,0)
CaseStat Number(5,0)
OpenDate Date
Table2
CaseNum Number(9,0)
CaseStat Number(5,0)
OpenDate Date
Então estou tentando criar esse gatilho, que irá inserir uma nova linha na tabela2 toda vez que a tabela1 for inserida ou atualizada. O objetivo é fazer da Tabela2 um histórico de alterações na tabela1:
CREATE OR REPLACE TRIGGER TABLE1_HIST
AFTER INSERT OR UPDATE ON TABLE1
FOR EACH ROW
BEGIN
INSERT INTO TABLE2
VALUES (CaseNum, CaseStat, sysdate);
END;
Quando tento criá-lo, recebo os seguintes erros:
Error(2,3): PL/SQL: SQL Statement ignored
Error(3,20): PL/SQL: ORA-00984: column not allowed here
Mas eu verifiquei e verifiquei novamente os tipos de coluna, e eles parecem ser todos iguais.
Acontece que quando substituo VALUES (CaseNum, CaseStat, sysdate); com números codificados, permite-me criar o gatilho!
Isso funciona:
CREATE OR REPLACE TRIGGER TABLE1_HIST
AFTER INSERT OR UPDATE ON TABLE1
FOR EACH ROW
BEGIN
INSERT INTO TABLE2
VALUES (123456789, 12345, sysdate);
END;
No entanto, isso obviamente não é útil.
Qualquer sugestão será apreciada.
Você deve especificar valores na instrução insert. PL/SQL permite que você use variáveis de ligação padrão para referenciar os valores de nível de linha da atualização ou inserção dentro do gatilho, assim:
Além disso, geralmente é melhor especificar coisas como a ordem das colunas explicitamente, em vez de confiar na ordem das colunas na tabela, que pode ser alterada.