Maison >base de données >tutoriel mysql >Introduction aux fonctions et propriétés des curseurs
La fonction et les attributs du curseur
La fonction du curseur est de parcourir les enregistrements renvoyés par la base de données de requête afin d'effectuer les opérations correspondantes. Le curseur a les attributs suivants : :
a. Le curseur est en lecture seule, c'est-à-dire qu'il ne peut pas être mis à jour ;
b. Le curseur ne peut pas défiler, c'est-à-dire qu'il ne peut être parcouru que dans une seule direction ; et ne peut pas avancer ou reculer à volonté entre les enregistrements. , ne peut pas sauter certains enregistrements
c. Éviter de mettre à jour les données sur une table avec un curseur ouvert ;
Implémentez la fonction pour diviser la quantité relativement importante de données nt_m_gpsdata (3000W+) par date en nt_m_gpsdata20170501, nt_m_gpsdata20170502, nt_m_gpsdata20170503, etc.
CRÉER UNE PROCÉDURE `new_ proc edure` ()
BEGIN
--Besoin de définir des variables pour recevoir les données du curseur
DECLARE a CHAR(16);
--Définir le nom de la nouvelle table
DÉCLARE tbname CHAR(30);
-- définir des variables pour stocker les instructions SQL
DÉCLARE sqlstr1 varchar(300);
DÉCLARE sqlstr2 varchar( 300);
-- Indicateur de fin pour le parcours des données
DECLARE done INT DEFAULT FALSE;
--Définir le curseur
DECLARE cur CURSOR FOR select DISTINCT DATE_FORMAT(ctime,'% Y%m%d') as ctime from nt_m_gpsdata;
-- Lier l'indicateur de fin au curseur
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- Ouvrir le curseur
OPEN cur;
-- Démarrer la boucle
read_loop: LOOP
-- Extraire les données dans le curseur, il n'y en a qu'un ici, Il en va de même pour plusieurs mots ;
FETCH cur INTO a;
-- À la fin de l'instruction
IF done ALORS
LEAVE read_loop;
END IF;
-- Ici, faites les événements de boucle que vous souhaitez faire
set tbname=CONCAT("nt_m_gpsdata", a);
-- select tbname;
-- Copiez la structure de la table, créez la table newtable select * from oldtable où 1=2 Seuls les champs de la table peuvent être copiés et les attributs tels que le champ la clé primaire, l'incrémentation automatique et les valeurs non nulles ne peuvent pas être copiées. Créer une table, une nouvelle table comme l'ancienne table peut être copiée. Attributs de champ
set sqlstr1 = CONCAT("create table ",tbname," like nt_m_gpsdata"); set sqlstr2 = CONCAT("insert into ",tbname," select * from nt_m_gpsdata where deleted=0 and DATE_FORMAT(ctime,'%Y%m%d')='",a,"'"); set @firstsql = sqlstr1; PREPARE stmt1 FROM @firstsql; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; set @secondsql = sqlstr2; PREPARE stmt2 FROM @secondsql; EXECUTE stmt2; DEALLOCATE PREPARE stmt2;
FIN DE BOUCLE ;
-- Fermer le curseur
CLOSE cur;
END
Plus tard, la stratégie de fractionnement de table est appliquée à un projet Oracle et le code est joint
DECLARE cursor my_cursors is select DISTINCT to_char(ctime,'yyyymmdd') as ctime from NTGIS_GPS_EVENTDATA; mcursor varchar2(40); begin for mcursor in my_cursors loop DECLARE tbname VARCHAR2(50) := 'NTGIS_GPS_EVENTDATA'||mcursor.ctime; sqlstr VARCHAR2(300) := 'CREATE TABLE '||tbname||' as SELECT * from NTGIS_GPS_EVENTDATA where to_char(ctime,''yyyymmdd'')='''||mcursor.ctime||''''; BEGIN --dbms_output.put_line(tbname); execute immediate sqlstr; END; end loop; end;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!