Criando uma Trigger de auto increment

CONECTANDO COMO SYSTEM

Conectando como System
conn system/coti	
					
Criando Usuario
create user aula4 identified by coti 
default tablespace users 
quota 10m on users;
						
Permissões para usuario
grant create table, create session, create procedure, create view, create trigger, connect, create sequence to aula4;
Conectando como "aula04"
conn aula4/coti
						
Criando a tabela Funcionario
create table funcionario(
	id number (15) primary key,
	nome varchar (50),
	email varchar (50) unique
	);
							
Criando a sequencia
create sequence seq_funcionario;
								
Criando o gatilho para autoincrementar o ID na hora de inserir o Funcionario
create or replace trigger gat_funcionario before insert on funcionario 
for each row 
declare 
vid number (15) :=0; 
vconta number (15) :=0; 
begin 
dbms_Output.put_line('1gatilho :' || :new.id);
dbms_Output.put_line('2gatilho :' || vid); 
select count(id) into vconta from funcionario; 
dbms_Output.put_line('10conta :' || vconta); 
if vconta=0 then 
--primeira vez 
:new.id :=vconta +1; 
elsif :new.id is not null then 
--na mao 
dbms_Output.put_line('4gatilho :' ||:new.id); 
else 
--null a partir da segunda vez 
select max(id) into vid from funcionario; 
dbms_Output.put_line('3gatilho :' || vid); 
vid := vid + 1; 
:new.id := vid; 
end if; 
end; 
/
									
Comando para mostrar os errors.
show errors;
										
Inserção de dados.
insert into funcionario values (null, 'talles','talles@gmail.com'); 
insert into funcionario values (null, 'fadinha','fadinha@gmail.com'); 
insert into funcionario values (null, 'jao','jao@gmail.com'); 
insert into funcionario values (100, 'manopla','manopla@gmail.com'); 
insert into funcionario values (null, 'lu','lu@gmail.com');
											
Pesquisando todos os registros do banco.
select * from funcionario;