- Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
Anônimo.
-
AutorPosts
-
15 de setembro de 2010 às 5:33 pm #96087
Anônimo
Bom dia amigos!!
fiz esta procedure para inserir um funcionário em uma tabela, ela está funcionando perfeitamente, porém gostaria que o campo codigo_depto fosse inserir automáticamente de acordo com o codigo_depto do chefe. Estou tentando a dias fazer isto mas não estou conseguindo. Alguem pode me ajudar??[b]Create table departamento(
codigo number(5) primary key,
descricao varchar2(40),
local varchar2(40)
);Create table funcionario(
codigo number(5) primary key,
nome varchar2(40),
ende varchar2(40),
tel char(8),
data_cont date,
cargo varchar2(40),
salario number(10,2),
chefe number(5),
codigo_depto number(5),
Foreign key(chefe)
references funcionario(codigo),
Foreign key(codigo_depto)
references departamento(codigo)
);Create or replace procedure ins_departamento(
v_descricao in departamento.descricao%type,
v_local in departamento.local%type
)
Is
Begin
Insert into departamento(codigo, descricao, local)
Values(seq_departamento.nextval, v_descricao, v_local);
Commit;
End;Create or replace procedure ins_funcionario(
v_nome in funcionario.nome%type,
v_end in funcionario.ende%type,
v_tel in funcionario.tel%type,
v_cargo in funcionario.cargo%type,
v_salario in funcionario.salario%type,
v_chefe in funcionario.chefe%type,
v_codigo_depto in funcionario.codigo_depto%type
)
Is
v_data funcionario.data_cont%type;
Begin
v_data := sysdate;
Insert into funcionario(codigo, nome, ende, tel, data_cont, cargo, salario, chefe, codigo_depto)
Values(seq_funcionario.nextval, v_nome, v_end, v_tel, v_data, v_cargo, v_salario, v_chefe, v_codigo_depto);
Commit;
End;[/b]15 de setembro de 2010 às 6:27 pm #96091Regis Araujo
ParticipanteFala Well… bom dia..!
Você pode fazer este tipo de insert, com uma trigger..
Mais ou menos assim o codigo..
select codigo_depto into p_codigo_depto
from funcionario
where chefe = new.chefe;new.codigo_depto := p_codigo_depto
Ai na sua procedure, vc retira o insert no campo codigo_depto, deixando que a trigger faça este insert…
Abraços..!
15 de setembro de 2010 às 7:14 pm #96094burga
Participanteeu alteraria o procedimento pra:
Create or replace procedure ins_funcionario(
v_nome in funcionario.nome%type,
v_end in funcionario.ende%type,
v_tel in funcionario.tel%type,
v_cargo in funcionario.cargo%type,
v_salario in funcionario.salario%type,
v_chefe in funcionario.chefe%type := NULL,
v_codigo_depto in funcionario.codigo_depto%type := NULL
)
Is
cursor c_retorna_depto_chefe(p_chefe in funcionario.chefe%type) is
select codigo_depto from funcionario where codigo = p_chefe;
v_data funcionario.data_cont%type;
v_codigo_depto_1 funcionario.codigo_depto%type;
Begin
v_data := sysdate;
if (v_chefe is null) then
v_codigo_depto_1 := v_codigo_depto;
else
open c_retorna_depto_chefe(v_chefe);
fetch c_retorna_depto_chefe into v_codigo_depto_1;
close c_retorna_depto_chefe;
end if;
Insert into funcionario(codigo, nome, ende, tel, data_cont, cargo, salario, chefe, codigo_depto)
Values(seq_funcionario.nextval, v_nome, v_end, v_tel, v_data, v_cargo, v_salario, v_chefe, v_codigo_depto_1);
Commit;
End;Onde informa-se o codigo do depto apenas nos casos em que é inserção de cadastro de chefe (onde o funcionario nao possui chefe) e quando o funcionario possui chefe, ele pega o departamento do chefe e insere coloca no depto do funcionario…
16 de setembro de 2010 às 4:26 pm #96104Anônimo
Valeu galera!!
Me ajudaram de verdade…Abraços
-
AutorPosts
- Você deve fazer login para responder a este tópico.