MySQL - Error en funcion

 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido su posición en 4 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Error en funcion

Publicado por Lorenzo (1 intervención) el 19/01/2021 22:09:22
Buenas, soy nuevo con MySQL y estoy tratando de crear una funcion que reciba los parametros de una nueva cuenta y los agregue a sus respectivas tablas, pero me esta dando error y no logro dar con el mismo.
La sentencia es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
CREATE FUNCTION insert_account(account_type INT, name_ VARCHAR(20), last_name_ VARCHAR(20), document_ INT, gender_ TINYINT(1), active_ TINYINT(1)) RETURNS TINYINT(1)
BEGIN
	DECLARE result TINYINT(1);
    DECLARE professor_id INT;
    DECLARE student_id INT;
	SET result =0;
    	IF account_type = 1 THEN
    	add_admin:BEGIN
    		INSERT INTO person (document, name, last_name, gender)
        				VALUES (document_, name_, last_name_, gender_);
       		INSERT INTO account (user_name, pass, type, person_id)
        				VALUES (document_, professor_id, account_type, document_);
        	SET result =1;
    	END add_admin
    	ELSEIF account_type = 2 THEN
    	add_student: BEGIN
        	SET student_id = SELECT COUNT(*) FROM student
        	SET student_id = student_id+1;
 
        	INSERT INTO student (file_id, person_id)
        				 VALUES (student_id, document_);
        	INSERT INTO person (document, name, last_name, gender)
        				VALUES (document_, name_, last_name_, gender_);
       		INSERT INTO account (user_name, pass, type, person_id)
        				 VALUES (document_, student_id, account_type, document_);
        	SET result = 1;
        END add_student
        ELSE
        add_professor BEGIN
        	SET professor_id = SELECT COUNT(*) FROM professor
        	SET professor_id = professor_id+1;
 
        	INSERT INTO professor (file_id, person_id, active)
        				 VALUES (professor_id, document_, active_);
        	INSERT INTO person (document, name, last_name, gender)
        				VALUES (document_, name_, last_name_, gender_);
        	SET result = 1;
        END add_professor
        RETURN result;
END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Error en funcion

Publicado por anonymous (59 intervenciones) el 19/01/2021 22:56:52
NO dices que error es el que te muestra.

De cualquier forma las funciones se suelen emplear más para retornar ciertos datos simples.

Eso que pretendes realizar es mejor que lo hagas en un procedimiento almacenado, al que igualmente le puedes colocar un parámetro OUT que retorne el TINYINT que tienes en la función.

Por lo que veo tienes varios insert dentro de la misma función y todos devuelven un result, pero la función solo te retorna uno, mediante un procedimiento almacenado puedes retornar varios parámetros de tipo OUT
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error en funcion

Publicado por anonymous (59 intervenciones) el 20/01/2021 01:30:25
Tienes algunos errores en esa function que construiste, pero vas a probarlo así de esta forma; aclaro que yo no lo puedo probar porque no tengo las estructuras de tu BD entonces no compila, pero tú encárgate de probarlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
CREATE PROCEDURE insert_account(
  IN  account_type    INT,
  IN  name_ 	     VARCHAR(20),
  IN  last_name_ 	     VARCHAR(20),
  IN  document_ 	     INT,
  IN  gender_ 	     TINYINT(1),
  IN  active_ 	     TINYINT(1),
  OUT p_result	             TINYINT(1))
 
BEGIN
            DECLARE professor_id INT;
	    DECLARE student_id INT;
 
      DECLARE EXIT HANDLER
      FOR SQLEXCEPTION
         BEGIN
             SET p_result = -1;
             ROLLBACK;
         END;
 
	    SET p_result = 1;
  		IF (account_type = 1) THEN
  			START TRANSACTION;
 
  			INSERT INTO person (document, name, last_name, gender) VALUES (document_, name_, last_name_, gender_);
 
  			INSERT INTO account (user_name, pass, type, person_id)VALUES (document_, professor_id, account_type, document_);
 
  			COMMIT;
  		ELSEIF (account_type = 2) THEN
          SELECT (COUNT(*)+1) INTO student_id FROM student;
					START TRANSACTION;
 
  				INSERT INTO student (file_id, person_id) VALUES (student_id, document_);
 
  				INSERT INTO person (document, name, last_name, gender) VALUES (document_, name_, last_name_, gender_);
 
  				INSERT INTO account (user_name, pass, type, person_id) VALUES (document_, student_id, account_type, document_);
 
  				COMMIT;
  		ELSE
          SELECT (COUNT(*)+1) INTO professor_id FROM professor;
					START TRANSACTION;
 
  				INSERT INTO professor (file_id, person_id, active) VALUES (professor_id, document_, active_);
  				INSERT INTO person (document, name, last_name, gender) VALUES (document_, name_, last_name_, gender_);
 
  				COMMIT;
 
  		END IF;
 
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar