Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Inserir valor na chave estrangeira


edersonnves

Pergunta

pessoal tenho duas tabelas uma tabela chamada guarnição onde tenho id_guarnicao como chave primaria, e é auto incrementada, e tenho a outra tabela que é a boletim de ocorrencia onde id_guarnicao e chave estrangeira a minha dificuldade ta sendo inserir o valor de id_guarnicao na tabela boletim de ocorrencia utilizando trigger.

fiz dessa maneira mais não da certo ele altera o penultimo campo e o ultimo criado continua sem alterar

eu coloquei id_guarn = 1 pois estou inserindo o valor 1 pois não sabia como fazer. embaixo esta a maneira como estou fazendo

a trigger ta sendo criada na tabela guarnição isso ta correto?

CREATE DEFINER = 'root'@'localhost' TRIGGER `tbl_guarnicao_before_ins_tr` AFTER INSERT ON `tbl_guarnicao`

FOR EACH ROW

BEGIN

UPDATE `tbl_bol_ocorrencia` SET `id_guarn` = new.id_guarn WHERE `id_guarn` = 1;

END;

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'edersonnves' !

A melhor solução para isto não passa por um trigger. Passa por uma SP(Storage Procedure) ou por seu código na linguagem de programação que você usa.

Link para o comentário
Compartilhar em outros sites

  • 0

DELIMITER $$;

DROP PROCEDURE IF EXISTS `test`.`ADD_Func_ender`$$

CREATE PROCEDURE `test`.`ADD_Func_ender` (idfunc integer, idender integer)
BEGIN
   INSERT INTO funcionario_has_endereco (rl_id_func, rl,id_ender)
   VALUES (idfunc, idender);
END$$

DELIMITER;$$
CALL `test`.`ADD_Func_ender`(1, 1);

vi onde você mostrou so que não entende algumas coisas,

Primeiro eu vou colocar essa SP no meu sistema ou dentro do mysql?

Segundo os nomes da variaveis que coloca la em cima na linha do create tem que ser o mesmo da tabela?

Terceiro Acionador da SP que você colocou os valores (1,1) não vai ser o mesmo valor do que esta sendo inserido na tabela

Quarto o campo que quero inserir ele e auto incrementado, se colocar esse (1,1) não vai bater o valor me explica melhor o funcionamento desse CALL

Link para o comentário
Compartilhar em outros sites

  • 0

Oi,'edersonnves'

vi onde você mostrou so que não entende algumas coisas,

Primeiro eu vou colocar essa SP no meu sistema ou dentro do mysql?

Sempre dentro do MySQL

O código precisa ser adaptado a sua realidade.

Segundo os nomes da variaveis que coloca la em cima na linha do create tem que ser o mesmo da tabela?
Não. poderia chamar banana e laranja ou qualquer outra coisa. é uma variável e pode ter qualquer nome.

Terceiro Acionador da SP que você colocou os valores (1,1) não vai ser o mesmo valor do que esta sendo inserido na tabela
Não. Usei apenas como exemplo. Você tem que adaptar e colocar o nome de sua variável, por exemplo
CALL `test`.`ADD_Func_ender`(banana, laranja)´

Antes que você pregunte `test` é o nome do banco de dados que estou usando como exemplo.

`ADD_Func_ender` é o nome da storage procedure que estou usando como exemplo.

Quarto o campo que quero inserir ele e auto incrementado, se colocar esse (1,1) não vai bater o valor
Já expliquei acima.

me explica melhor o funcionamento desse CALL
É a forma de acionar uma storage procedure. É como um comando SELECT, ou INSERT ou outro comando SQL.

Link para o comentário
Compartilhar em outros sites

  • 0

fiz a procedure como falou

fiz utilizando o ems sql manager 2007

ai esta ela

CREATE DEFINER = 'root'@'localhost' PROCEDURE `inserir_chave`(
        IN id_ag_inf INTEGER(11),
        IN n_bop INTEGER(11)
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
INSERT INTO `rl_ag_inf_bol_oc` (id_ag_inf, n_bop)
   VALUES (id_ag_inf, n_bop);
END;
agora quando vou tentar fazer o call que fiz dessa maneira
CALL `bop`.`inserir_chave`(id_ag_inf, n_bop);

ele da esse erro :Unknown column 'id_ag_inf' in 'field list' se no lugar dessas variaveis eu colocar alguns valores ele vai beleza so que não e essa a intenção, a intenção e colocar os mesmo valores das outras tabelas.

o que tenho que fazer para isso acontecer?

será que esse call eu tenho que usar no meu sistema?

Editado por Denis Courcy
adequar padrão
Link para o comentário
Compartilhar em outros sites

  • 0

Oi,'edersonnves'

INSERT INTO `rl_ag_inf_bol_oc` (id_ag_inf, n_bop)
id_ag_inf e n_bop são campos desta tabela `rl_ag_inf_bol_oc`? Se sim, troque o nome da variável
CREATE DEFINER = 'root'@'localhost' PROCEDURE `inserir_chave`(
        IN id_ag_inf INTEGER(11),
        IN n_bop INTEGER(11)
    )
para algo como: v_id_ag_inf, v_n_bop , por exemplo. Troque, também nesta linha:
VALUES (id_ag_inf, n_bop);

Quanto sua pergunta:

será que esse call eu tenho que usar no meu sistema?

A resposta é sim. Este comando você deve dar de dentro de seu programa. ele acionará a storage procedure com os parâmetros que você passar. Como uma função/procedure normal de seu programa. Só que realizando a operação dentro do BD.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...