Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #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]

      #96091
      Avatar photoRegis Araujo
      Participante

        Fala 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..!

        #96094
        burga
        Participante

          eu 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…

          #96104
          Anônimo

            Valeu galera!!
            Me ajudaram de verdade…

            Abraços

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.