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

(Resolvido) Problemas com a Sintaxe IF no MYSQL


btolinux

Pergunta

Olá pessoal e Desde já obrigado

tenho uma estrutura de tabelas que precisa de criar uma procedure que faça a seguinte inserção de dados através de uma procedure:

Primeiro Criando as Tabelas

CREATE TABLE `faculdade`.`alunos` (
`pk_aluno` int(11) NOT NULL AUTO_INCREMENT,
`nm_matricula` int(11) NOT NULL,
`ds_aluno` varchar(100) NOT NULL,
`ds_cpf` varchar(20) NOT NULL,
`ds_end` varchar(100) NOT NULL,
PRIMARY KEY (`pk_aluno`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

CREATE TABLE `faculdade`.`docentes` (
`pk_docente` int(11) NOT NULL AUTO_INCREMENT,
`ds_docente` varchar(100) NOT NULL,
`ds_cpf` varchar(20) NOT NULL,
`ds_end` varchar(100) NOT NULL,
PRIMARY KEY (`pk_docente`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

CREATE TABLE `faculdade`.`disciplinas` (
`pk_disciplina` int(11) NOT NULL AUTO_INCREMENT,
`ds_disciplina` varchar(100) NOT NULL,
`ds_cargahoraria` varchar(10) NOT NULL,
`cd_disciplina` int(11) NOT NULL,
`fk_docente` int(11) NOT NULL,
PRIMARY KEY (`pk_disciplina`),
KEY `docentesxdisc` (`fk_docente`),
CONSTRAINT `docentesxdisc` FOREIGN KEY (`fk_docente`) REFERENCES `docentes` (`pk_docente`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

CREATE TABLE `faculdade`.`alunosxdisciplinas` (
`pk_alunoxdiscplina` int(11) NOT NULL AUTO_INCREMENT,
`fk_aluno` int(11) NOT NULL,
`fk_disciplina` int(11) NOT NULL,
PRIMARY KEY (`pk_alunoxdiscplina`),
KEY `alunosxdisc` (`fk_aluno`),
KEY `disciplinasxaluno` (`fk_disciplina`),
CONSTRAINT `alunosxdisc` FOREIGN KEY (`fk_aluno`) REFERENCES `alunos` (`pk_aluno`) ON DELETE CASCADE,
CONSTRAINT `disciplinasxaluno` FOREIGN KEY (`fk_disciplina`) REFERENCES `disciplinas` (`pk_disciplina`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1;

INSERT INTO `faculdade`.`alunos` VALUES (1,12984,'Paulo Roberto','123','Rua Otávio Mangabeira'),
(2,12893,'Claudio José','321','Rua ACM'),
(3,12892,'Tatiane Dantas','456','Rua das Ameixas'),
(4,12891,'Gustavo','567','Rua Dom Pedro 2º');

INSERT INTO `faculdade`.`docentes` VALUES (1,'Rodrigo Pessoa','987','Rua das Acácias'),
(2,'Francisco José','231','Caminho 5 Casa 1'),
(3,'Giliard Ramos','312','Alameda dos Camelôs'),
(4,'Fernando Pessoa','321','Rua 5 de Outubro'),
(5,'João Dávila','8796','Avenida Santos Dumont');


INSERT INTO `faculdade`.`disciplinas` VALUES (1,'Ciências','60hs',3456,1),
(2,'Matemática','60hs',3457,2),
(3,'Português','60hs',3458,3),
(4,'História','30hs',3459,4),
(5,'Estudos Sociais','30hs',3460,1),
(6,'Educação Moral e Cívica','30hs',3461,2);
Agora a Sintaxe que vai para dentro da procedure
SELECT pk_aluno INTO @aluno
FROM alunos
WHERE ds_aluno = des_aluno;

SELECT pk_disciplina INTO @disciplina
FROM disciplinas
WHERE ds_disciplina = des_disciplina;

IF @aluno IS NULL THEN BEGIN
      INSERT INTO alunos VALUES(null, des_aluno);

      SELECT MAX(pk_aluno) INTO @aluno
      FROM alunos;
END; 

UPDATE alunosxdisciplinas SET fk_aluno = @aluno WHERE fk_disciplina = @disciplina;

Então, gostaria de saber se a estrutura do IF está correta, pois testando aqui apresenta uma mensagem de erro no UPDATE

Abraços para todo mundo e desde já obrigado pela atenção!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi 'btolinux'

Uma instrução IF, dentro de uma storage procedure, trigger ou função, termina sempre com um END IF.

Em seu caso a instução corereta seria:

IF @aluno IS NULL THEN 
INSERT INTO alunos VALUES(null, des_aluno);
   SELECT MAX(pk_aluno) INTO @aluno
   FROM alunos;
END IF;

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpem a demora em responder...

mas funcionou perfeitamente...

um grande abraço para todos e até uma próxima!

Oi 'btolinux'

Uma instrução IF, dentro de uma storage procedure, trigger ou função, termina sempre com um END IF.

Em seu caso a instução corereta seria:

IF @aluno IS NULL THEN 
INSERT INTO alunos VALUES(null, des_aluno);
   SELECT MAX(pk_aluno) INTO @aluno
   FROM alunos;
END IF;

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,2k
    • Posts
      652k
×
×
  • Criar Novo...