Maison >base de données >tutoriel mysql >Introduction aux fonctions et propriétés des curseurs

Introduction aux fonctions et propriétés des curseurs

rayZ
rayZoriginal
2017-07-26 09:24:273765parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn