Я создал хранимую процедуру для удаления данных из нескольких таблиц. моя работа потока следующим образомхранимая процедура + mysql вопрос
Я использую MySQL 5.0 и работает на Linux
зависимостей таблицы следующим образом
таблицы C в зависимости от таблицы В таблицу В зависимости от таблице А,
Я хочу для удаления записи в таблице A и удаления всех связанных записей в таблицах B и C
1 - удалить все данные из таблиц подробностей (C) (с хранимой процедурой sp_delete_from_C)
2 - удалить данные, относящиеся к немедленной дочерней таблицы (B) (с хранимой процедурой sp_delete_from_B)
3 - удаление основной таблицы (A) (с хранимой процедурой sp_delete_from_A)
Я написал следующую процедуру
CREATE PROCEDURE sp_A_rollback(IN aId INT UNSIGNED)
READS SQL DATA
BEGIN
DECLARE b_id INT DEFAULT 0;
DECLARE cur_1 CURSOR FOR SELECT id FROM b where a_id=aId;
OPEN cur_1;
read_loop: LOOP
FETCH cur_1 INTO a_id;
CALL sp_delete_from_C(b_id);
END LOOP;
CLOSE cur_1;
CALL sp_delete_from_B(aId);
CALL sp_delete_from_A(aId);
END //
Мой вопрос,
Если я запустить эти процедуры индивидуально работает
, но если вы запустите sp_A_rollback, то выполните только «sp_delete_from_C»
У меня нет идеи, почему он не вызывает другие 2 sps. Я новичок в хранимых процедурах mysql. пожалуйста, может кто-то помочь мне
заранее спасибо
Sameera
Hi f00, спасибо за ответ. Я использую курсоры здесь, потому что для удаления из таблицы C у меня есть только ключ таблицы B. Так как мне нужен цикл, я использую курсор. и в реальном renario я должен использовать другие хранимые процедуры вместо прямых операторов удаления (потому что есть некоторые логики, и эти процедуры уже реализованы). поэтому я должен вызвать другие sps внутри этого SP. любые мысли, еще раз спасибо за ответ – sameera207
, см. раздел EDIT в моем ответе выше :) –