Beim Schreiben gespeicherter Prozeduren werden häufig Arrays verwendet. In MySQL gibt es jedoch keine Methode, um Arrays direkt an gespeicherte Prozeduren zu übergeben. Können wir in diesem Fall nur auf die Methode zurückgreifen oder sie ändern, mit der die Parameter in Form von Zeichenfolgen übergeben werden, und die Zeichenfolgen dann im Prozedurkörper in Arrays konvertieren? Leider muss ich Ihnen mitteilen, dass MySQL keine direkte Funktion zum Konvertieren eines Strings in ein Array bereitstellt. Möchten Sie jetzt jemanden schlagen? Aber keine Panik. Wenn dieser Weg versperrt ist, können wir einen anderen nehmen. Es gibt immer eine Lösung. Wir können die eingehende Zeichenfolge in mehrere Zeichen kürzen und sie an eine temporäre Tabelle übergeben und dann einen Cursor verwenden oder die Tabelle direkt verbinden, um die Daten zu filtern. Dadurch wird später der gewünschte Effekt erzielt. Sehen wir uns ein Beispiel an, um dies in die Praxis umzusetzen: 1. Erstellen Sie eine Datenbank für die Instanz: DATENBANK ERSTELLEN huafeng_db; verwenden Sie huafeng_db; Tabelle löschen, wenn `huafeng_db`.`t_scores` vorhanden ist; Tabelle löschen, wenn `huafeng_db`.`t_students` vorhanden ist; Tabelle löschen, wenn `huafeng_db`.`t_class` vorhanden ist; TABELLE `huafeng_db`.`t_class` ERSTELLEN ( `class_id` int(11) NICHT NULL, `class_name` varchar(32) ZEICHENSATZ utf8 STANDARD NULL, PRIMÄRSCHLÜSSEL (`class_id`) )ENGINE=InnoDB STANDARD-CHARSET=utf8; INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('1', 'Erste Klasse'); INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('2', 'Zweite Klasse'); INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('3', 'Klasse drei'); INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('4', 'Vierte Klasse'); INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('5', 'Fünfte Klasse'); INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('6', 'Klasse 6'); TABELLE `t_students` ERSTELLEN ( `student_id` int(11) NICHT NULL AUTO_INCREMENT, `student_name` varchar(32) NICHT NULL, `sex` int(1) STANDARD NULL, `seq_no` int(11) STANDARD NULL, `class_id` int(11) NICHT NULL, PRIMÄRSCHLÜSSEL (`student_id`), SCHLÜSSEL `class_id` (`class_id`), EINSCHRÄNKUNG `t_students_ibfk_1` FREMDER SCHLÜSSEL (`class_id`) REFERENZEN `t_class` (`class_id`) )ENGINE=InnoDB STANDARD-CHARSET=utf8; INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiaohong',0,1,'1'); INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiaoqing',0,2,'2'); INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiao Ming',1,3,'3'); INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Sequenznummer`,`Klassen-ID`) VALUES('Xiao Lan',0,4,'4'); INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Seq-Nr.`,`Klassen-ID`) VALUES('Studentenname',1,5,'5'); INSERT INTO `huafeng_db`.`t_students`(`Studentenname`,`Geschlecht`,`Seq-Nr.`,`Klassen-ID`) VALUES('Studentenname',1,6,'6'); TABELLE `huafeng_db`.`t_scores` ERSTELLEN ( `score_id` int(11) NICHT NULL AUTO_INCREMENT, `course_name` varchar(64) STANDARD NULL, `score` double(3,2) STANDARD NULL, `student_id` int(11) STANDARD NULL, PRIMÄRSCHLÜSSEL (`score_id`), SCHLÜSSEL `student_id` (`student_id`), EINSCHRÄNKUNG `t_scores_ibfk_1` FREMDER SCHLÜSSEL (`student_id`) REFERENZEN `t_students` (`student_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('1', 'Chinesisch', '90', '1'); INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('2', 'Wert', '97', '1'); INSERT INTO `t_scores` (`score_id`, `Kursname`, `Punktzahl`, `Studenten-ID`) VALUES ('3', 'Englisch', '95', '1'); INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('4', 'Chinesisch', '92', '2'); INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('5', '5', '100', '2'); INSERT INTO `t_scores` (`score_id`, `Kursname`, `Punktzahl`, `Studenten-ID`) VALUES ('6', 'Englisch', '98', '2'); 2. Anforderung: Stapelweises Löschen von Studenteninformationen gemäß Studentenausweis DROP-VERFAHREN, WENN EXISTIERT `p_del_studentInfo_bySeqNo`; TRENNUNGSZEICHEN $$ PROZEDUR ERSTELLEN p_del_studentInfo_bySeqNo(IN arrayStr VARCHAR(1000),IN sSplit VARCHAR(10)) SQL SECURITY INVOKER #Anderen Benutzern das Ausführen erlauben BEGIN DECLARE e_code INT DEFAULT 0; #Den Fehlercode auf 0 initialisieren DECLARE result VARCHAR(256) CHARACTER set utf8; #Initialisiere das zurückgegebene Ergebnis, um das chinesische verstümmelte Problem zu lösen DECLARE arrLength INT DEFAULT 0; /*Definiere die Array-Länge*/ DECLARE arrString VARCHAR(1000);/*definiere das anfängliche Array-Zeichen*/ DECLARE sStr VARCHAR(1000);/*definiere das Anfangszeichen*/ DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET e_code=1;#Ausführung nach Auftreten eines Fehlers fortsetzen; (verwenden Sie dies, wenn Sie das Ausführungsergebnis zurückgeben müssen) START TRANSACTION;#Transaktion starten SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));/*Array-Länge abrufen*/ SET arrString = arrayStr; Temporäre Tabelle löschen, falls vorhanden, list_tmp; Temporäre Tabelle erstellen list_tmp(id VARCHAR(32));/*Temporäre Tabelle definieren*/ WHILE arrLength > 0 DO set sStr = substr(arrString,1,instr(arrString,sSplit)-1); – Ruft die Zeichenfolge vor dem Trennzeichen ab set arrString = substr(arrString,length(sString)+length(sSplit)+1); – Ruft die Zeichenfolge nach dem Trennzeichen ab set arrLength = arrLength -1; setze @str = trim(sStr); in list_tmp(id) Werte(@str) einfügen; ENDE WÄHREND; WENN row_count()=0 DANN Setzen Sie den E-Code auf 1. SET-Ergebnis = „Bitte geben Sie die korrekten Parameter ein“; ENDE, WENN; setze @count = (SELECT count(1) FROM t_students s,list_tmp t WHERE s.seq_no = t.id); WENN @count > 0 DANN LÖSCHEN AUS t_scores, WO student_id in (WÄHLEN s.student_id AUS t_students s,list_tmp t, WO s.seq_no = t.id); LÖSCHEN AUS t_students, WO student_id in (WÄHLEN Sie t.id AUS list_tmp t); SONST Setzen Sie den E-Code auf 1. SET-Ergebnis = 'Der Student existiert nicht! '; ENDE WENN; WENN e_code=1 DANN ROLLBACK; #Rollback SONST BEGEHEN; SET-Ergebnis = „Der Student wurde erfolgreich gelöscht“; ENDE, WENN; SELECT-Ergebnis; Temporäre Tabelle löschen, falls vorhanden, list_tmp; ENDE $$ TRENNUNGSZEICHEN ; Hinweis: Beim Erstellen einer gespeicherten Prozedur werden zwei Parameter übergeben. Der erste Parameter stellt das zu übergebende Array-String-Format dar und der zweite Parameter ist die Methode, mit der der String aufgeteilt wird. Deklarieren und Initialisieren von Variablen DECLARE arrLength INT DEFAULT 0;/*Arraylänge definieren*/ DECLARE arrString VARCHAR(1000);/*definiere das anfängliche Array-Zeichen*/ DECLARE sStr VARCHAR(1000);/*definiere das Anfangszeichen*/ Holen Sie sich die Länge des eingehenden Parameter-Arrays SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));/*Arraylänge abrufen*/ SET arrString = arrayStr;/*Zuweisung*/ Erstellen einer temporären Tabelle Temporäre Tabelle löschen, falls vorhanden, temporäre Liste; Temporäre Tabelle erstellen list_tmp(id VARCHAR(32));/*Temporäre Tabelle definieren*/ Fangen Sie die Array-Zeichenfolge ab und speichern Sie sie in einer temporären Tabelle zur späteren geschäftlichen Verwendung WHILE arrLength > 0 DO set sStr = substr(arrString,1,instr(arrString,sSplit)-1); – Ruft die Zeichenfolge vor dem Trennzeichen ab set arrString = substr(arrString,length(sString)+length(sSplit)+1); – Ruft die Zeichenfolge nach dem Trennzeichen ab set arrLength = arrLength -1; setze @str = trim(sStr); in list_tmp(id) Werte(@str) einfügen; ENDE WÄHREND; Hinweis: Vergessen Sie nicht, die temporäre Tabelle am Ende der gespeicherten Prozedur zu löschen. Für Unternehmen, die nicht sehr komplex sind, besteht keine Notwendigkeit, gespeicherte Prozeduren zu verwenden. Dieser Artikel führt nicht jeden zur Verwendung gespeicherter Prozeduren an, sondern lässt nur alle wissen, dass es so etwas gibt! Das könnte Sie auch interessieren:
|
<<: Beispielcode für die Vue-Bildzuschneidekomponente
>>: Lösen Sie das Problem des Startfehlers von PHPStudy MySQL unter Windows
Beschreibung der Sicherheitslücke Apache Flink is...
Inhaltsverzeichnis vite Bauen Konfiguration vite....
In diesem Artikel wird die Verwendung und Install...
Vorwort In einigen Fällen kennen wir nur die Intr...
1. Centos7 unter VMware verbinden und eine feste ...
VMware-Version: VMware-Workstation-Full-16 VMware...
Ich habe heute Abend ein Problem gelöst, das mich...
(1) Experimentelle Umgebung youxi1 192.168.5.101 ...
Befolgen Sie die nachstehenden Schritte 1. Inhalt...
Inhaltsverzeichnis 1. Übersicht 2. Verwenden Sie ...
Inhaltsverzeichnis Warum brauchen wir Docker? Bei...
Erstellen Sie docker-compose.yml und füllen Sie d...
VMware-Vorbereitung CentOS-Vorbereitung, hier ist...
Mehrweg-Suchbaum Höhe eines vollständigen Binärba...
Mit der Popularität und Reife von Docker ist es a...