Saltar al contenido

MySQL Cómo INSERTAR EN [temp table] DE [Stored Procedure]

Solución:

El problema es que los procedimientos almacenados no devuelven resultados directamente. Pueden ejecutar sentencias de selección dentro del script, pero no tienen valor de retorno.

MySQL llama a procedimientos almacenados a través de CALL StoredProcedureName(); Y no puede dirigir esa salida a nada, ya que no devuelven nada (a diferencia de una función).

Comando de llamada de MySQL

Mi primera reacción fue “Eso me suena a vista”. ¿No lo abstrae lo suficiente como para que pueda agregar la variabilidad en un SP por caso?

Cualquier cosa que agregue una tabla temporal que de otra manera no estaría allí es un antipatrón muy probable.

Sé que esto llegará muy tarde, pero como me tomó años encontrar una solución real, también podría compartirla. Trabajé en un ejemplo que está a continuación.

las tablas creadas son:

CREATE TABLE BOOK(
B_ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(B_ID),
TITLE VARCHAR(100),
DESCRIPTION VARCHAR(30),
PRICE DOUBLE);

CREATE TABLE BOOK_COMMENT(

PRIMARY KEY(B_C_ID),
B_C_ID INT NOT NULL AUTO_INCREMENT,
REMARK VARCHAR(120),
B_ID INT,
FOREIGN KEY(B_ID) REFERENCES BOOK(B_ID));

CREATE TABLE AUTHOR(
A_ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(A_ID),
A_NAME CHAR(15),
B_ID INT,

FOREIGN KEY(B_ID) REFERENCES BOOK(B_ID));
  1. DELIMITER

CREATE PROCEDURE BOOK_IMPORTANT( _PRICE DOUBLE, _B_ID INT, A_NAME CHAR(15), _BD_ID INT)

BEGIN

INSERT INTO BOOK(PRICE)

VALUES(_PRICE);

SET _B_ID=LAST_INSERT_ID();

INSERT INTO BOOK_COMMENT(B_ID)

VALUES(_B_ID);

SET _BD_ID=LAST_INSERT_ID();

INSERT INTO AUTHOR(A_NAME,B_ID)

VALUES(A_NAME,_BD_ID);

END

luego use lo siguiente para insertar los valores.

CALL BOOK_IMPORTANT('0.79',LAST_INSERT_ID(),'',LAST_INSERT_ID());

LAST_INSERT_ID() toma el último incremento automático de la tabla y lo inserta en la columna de referencia de la tabla secundaria.

En los parámetros del procedimiento _B_ID y _BD_ID representar el B_ID ya que necesito B_ID como clave externa en ambas tablas.

Perdón por el exceso de redacción. Todos los demás chicos esperan que sepas automáticamente cómo hacerlo. Espero eso ayude

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *