반응형
트리거를 저장, 변경 또는 삭제할 경우 MySql이 전체 프로그램을 중지합니다.
나는 일반적으로 SQL에 익숙하지 않아서, 나는 배우고, 나는 전에 많은 문제를 겪었고, 그래서 코드가 충분히 깨끗하지 않습니다.
여기 제 트리거가 있습니다. 모든 제품의 업데이트입니다. html로 테이블을 생성합니다.만약 당신이 그것을 할 수 있는 다른 방법을 생각해 낼 수 있다면, 나는 그것을 배우기 위해 그것을 알고 싶다, 처음에 나는 다른 커서 안에 커서를 만들려고 했지만 그것은 나에게 많은 오류를 주었다, 어떤 사람은 업데이트 전에 트리거를 해서 모든 제품을 살펴보고 내가 필요로 하는 검사만 하도록 추천했다, 모든 것에 감사합니다 <3.
(내 영어도 미안해, 네가 나를 이해할 수 있기를 바래)
BEGIN
declare contentCursor text;
declare tableContent text default "<table width=""250"" cellpadding=""0"" cellspacing=""0""><tbody>";
declare alegenos varchar(30);
declare contieneAlergenos int;
declare trazasCerca int;
declare siCerca text default "";
DECLARE ch_done INT DEFAULT 0;
DECLARE alegenosCursor cursor for select Nombre from ps_ets_ept_alegenos;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ch_done = 1;
-- Guardo el contenido de la descr (En los primeros 150 productos era una tabla que convertir en otra)
-- SELECT contentCursor;
-- Generar tabla correctamente apartir de la tabla equivocaeda
-- Recorro una tabla con la lista de alergenos
BLOCK2: begin
open alegenosCursor;
bucleAlergenos:LOOP fetch alegenosCursor into alegenos;
IF(ch_done = 1) THEN
-- handle the No data error!
set ch_done=1;
END IF;
-- Veo si el alergeno actual lo tiene la tabla incorrecta
SELECT LOCATE(alegenos, old.content) into contieneAlergenos;
if contieneAlergenos>0 then
-- En el caso de que este busco si tiene un Trazas o un Si, si me coloco al final de la palabra del alergeno, sumandole los 44 Es donde empieza el Si o el Trazas, el siete es por el largo de trazas + 1 espacio
SELECT LOCATE("Trazas",SUBSTR(old.content,contieneAlergenos+length(alegenos)+44,7)) INTO trazasCerca;
-- Si trazasCerca es mayor que 0 el contenido de ese alergeno son Trazas, asi que se lo asigno a la variable siCerca, en caso de que sea 0 le asigno un Si
if trazasCerca>0 then SET siCerca="Trazas";
else SET siCerca="Si";
end if;
-- Concadeno el Si o el Trazas
SELECT CONCAT(tableContent,"<tr><td width=""60%"" align=""left""><strong>", alegenos, "</strong></td><td width=""40%"" align=""left""> ", siCerca, "</td></tr>") INTO tableContent; -- devuelve Alergeno y una string si tiene Trazas o si, hace falta un locate de Si o Trazas y generar la tabla
-- En caso de no encontrar el alergeno, le meto el campo de la tabla con el alergeno y un no
else SELECT CONCAT(tableContent,"<tr><td width=""60%"" align=""left""><strong>", alegenos, "</strong></td><td width=""40%"" align=""left"">No</td></tr>")INTO tableContent ; -- tienes el alergeno que no está en la tabla, aqui generare la td de el alergeno con un No
end if;
-- reinicio las variables que suelo concadenar
SET siCerca="";
SET trazasCerca=0;
SET contieneAlergenos=0;
-- select tableContent as Dentro;
END LOOP bucleAlergenos;
select CONCAT(tableContent,"</tbody></table>")INTO tableContent;
insert into pruebaTablas VALUES (tableContent);
set tableContent="";
close alegenosCursor;
END BLOCK2;
END
언급URL : https://stackoverflow.com/questions/72992579/mysql-freezes-the-whole-program-if-i-save-alter-or-try-to-delete-a-trigger
반응형
'programing' 카테고리의 다른 글
csv 가져오기 판다 중 행 건너뛰기 (0) | 2023.08.23 |
---|---|
Swift에서 파일 확장자에서 파일 이름을 분할하는 방법은 무엇입니까? (0) | 2023.08.23 |
Javascript/jQuery에서 (e)는 무엇을 의미합니까? (0) | 2023.08.23 |
Oracle: 보기에 대한 열 데이터 유형을 가져올 수 있는 방법이 있습니까? (0) | 2023.08.23 |
Ajax 응답 내부에 반환된 js 파일 실행 (0) | 2023.08.23 |