Iam sehr neu in gespeicherten Prozedur, keine Abfrage Abfrage funktioniert, aber jeder bessere Code wird sehr spürbar.
Ich habe zwei Tabellen
1.Users ===> Die wichtigsten Datensätze Tabelle
2.temp_Users ===> Tabelle enthalten aktualisierte aktuelle Benutzer Informationen
Meine erforderliche Aufgabe ist
A.Check Benutzer, die gelöscht werden müssen.
B.Add neue Benutzer, die nicht in der Tabelle sind Benutzer aus Tabelle temp_Users
Benötigen Sie Hilfe in MySQL gespeicherte Prozedur
DELIMITER //
CREATE PROCEDURE checkUsers()
BEGIN
DECLARE oldusers, newusers INT DEFAULT 0
//To catch delete users
SELECT COUNT(Users.Ext) INTO oldusers
FROM Users
LEFT JOIN temp_Users
ON temp_Users.Ext=Users.Ext
WHERE temp_Users.Ext IS NULL;
//To catch new users
SELECT COUNT(temp_Users.Ext) INTO newusers
FROM Users
RIGHT JOIN temp_Users
ON temp_Users.Ext=Users.Ext
WHERE Users.Ext IS NULL;
CASE
WHEN oldusers>0
THEN DELETE FROM Users SELECT Users.Ext
FROM Users
LEFT JOIN temp_Users
ON temp_Users.Ext=Users.Ext
WHERE temp_Users.Ext IS NULL;
WHEN newusers>0
THEN INSERT INTO Users (Ext) SELECT temp_Users.Ext
FROM Users
RIGHT JOIN temp_Users
ON temp_Users.Ext=Users.Ext
WHERE Users.Ext IS NULL;
ELSE exit;
END CASE;
END //
DELIMITER ;
Sie können Ihre beiden ursprünglichen 'SELECT' entfernen Statements, sowie die Zuordnung zu "Oldusers" und "Newusers", und entfernen Sie auch die "CASE". Führen Sie einfach Ihre 'DELETE' und' INSERT' Anweisungen aus; Wenn es Zeilen gibt, die den Kriterien entsprechen, wird die Aktion ausgeführt, und wenn keine vorhanden ist, wird sie nicht ausgeführt. Sie brauchen nicht die 'COUNT' oder Variablen. –
@KenWhite Ja, das ist meine letzte Option, aber ich muss lernen, wie es damit funktioniert. –
Sie möchten lernen, wie Sie Code schreiben, den Sie nicht brauchen? Ich fürchte, das macht keinen Sinn - Sie haben nach besserem Code gefragt, und ich habe Ihnen gesagt, was Sie für besseren Code brauchen (entfernen Sie unnötige Dinge). :) –