ERRO PLS-00103 - Problema com trigger Oracle

Quero que depois da inserção de uma linha na tabela, uma determinada coluna seja automaticamente setada com a data atual. A minha trigger tenta fazer isso.

create trigger tri_insert_update after insert on funcionario for each row declare contratacao date; begin contratacao := select to_char(sysdate, 'dd/mm/yyyy') from dual; update funcionario set (data_contratacao = contratacao); end;

Erros:

Erro(4,16): PLS-00103: Encontrado o símbolo "SELECT" quando um dos seguintes símbolos era esperado: ( - + case mod novo not nulo <um identificador> <um identificador delimitado por aspas duplas> <uma variável de ligação> continuar média contagem atual existe máx min prior sql stddev soma variance executar forall intercalar tempo timestamp interval data <um literal de string com especificação de conjunto de caracteres> <um número> <uma string SQL com aspas simples> pipe <um literal de Erro(5,1): PLS-00103: Encontrado o símbolo "UPDATE" Erro(5,42): PLS-00103: Encontrado o símbolo "=" quando um dos seguintes símbolos era esperado: . ) , @

Alguém pode me ajudar?

para atribuir o resultado de um select a uma variável você tem que usar o INTO. Ficaria assim:

select to_char(sysdate, 'dd/mm/yyyy') 
into 
contratacao
from dual; 

Isso é pra responder sua pergunta. Mas, se você quer que o campo tenha o valor da data atual quando der um insert na tabela, fica muito mais fácil usar um DEFAULT no campo. Assim você nem precisa de trigger.

[quote=ADEMILTON]para atribuir o resultado de um select a uma variável você tem que usar o INTO. Ficaria assim:

select to_char(sysdate, 'dd/mm/yyyy') 
into 
contratacao
from dual; 

Isso é pra responder sua pergunta. Mas, se você quer que o campo tenha o valor da data atual quando der um insert na tabela, fica muito mais fácil usar um DEFAULT no campo. Assim você nem precisa de trigger.[/quote]

Fica mais fácil. Modifiquei e agora estou com problema em pegar apenas a hora:minuto:segundo do servidor de banco de dados.
Como faço para pegar apenas essa informação?

Se quer resolver isso no select do banco seria:

select to_char(sysdate,'hh24:mi:ss') from dual;

[quote=ADEMILTON]Se quer resolver isso no select do banco seria:

select to_char(sysdate,'hh24:mi:ss') from dual;

[/quote]

O problema é que o campo que receberá o valor é do tipo date. Quero que esse campo contenha uma data no formato dia/mês/ano hora:minuto:segundo, mas não está dando certo.

Ei, bacaninha… em campos do tipo DATE o Oracle sempre grava completo: dia, mês, ano, horas, minutos, segundos e até milissegundos… Depois, vai de você, na leitura, extrair o que quiser usando o to_char com a devida máscara. Ele só não vai armazenar completo se por exemplo você der um TRUNC na data. Aí, de horas pra frente ele vai guardar zerado. Mas por default, é sempre completo.