Heim > Datenbank > MySQL-Tutorial > [MySQL 10] Cursor

[MySQL 10] Cursor

黄舟
Freigeben: 2017-02-04 13:34:54
Original
1175 Leute haben es durchsucht

In der Datenbank gibt es zwei Möglichkeiten, Daten zu verarbeiten:
Eine ist die Gesamtverarbeitungsmethode, die auf der Sammlung von Datenzeilen basiert und direkt mit SELECT-, UPDATE-, DELETE- und anderen Anweisungen betrieben wird (die SELECT-Anweisung fragt direkt ab). eine ganze Spalte);
Eine Möglichkeit besteht darin, Datenzeilen Zeile für Zeile zu verarbeiten, sodass Benutzer jeweils auf eine einzelne Datenzeile zugreifen können, anstatt auf den gesamten Satz von Datenzeilen zeilenweise Abfrage in einer bestimmten Spalte).

1. Erstellen Sie eine Datentabelle

mysql> select * from person;
+----+------+------+------+-----------+| id | name | sex  | age  | addr      |
+----+------+------+------+-----------+|  1 | Jone | fema |   27 | xianggang |
|  2 | Lily | fema |   25 | taiwan    |
|  3 | Bobe | male |   25 | ximan     ||  4 | Kity | fama |   20 | beijing   |
+----+------+------+------+-----------+
Nach dem Login kopieren


Fragen Sie die Spalte „addr“ in der Personendatentabelle ab, damit die Ergebnisse in dieser Form ausgegeben werden:
xianggang ;taiwan;ximan;beijing;

2. Abfrage

Methode 1:

drop procedure if exists useCursor ;delimiter //CREATE PROCEDURE useCursor() # 创建一个存储过程  BEGIN
    DECLARE oneAddr varchar(20) default '';  
# 定义一个变量oneAddr
    DECLARE allAddr varchar(80) default '';  
# 定义一个变量allAddr
    DECLARE curl CURSOR FOR SELECT addr FROM person.person; # 定义一个游标curl
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET oneAddr = null; 
# 如果没有数据返回,就将变量oneAddr设置为null
    # 也可以这么写
    # DECLARE CONTINUE HANDLER FOR NOT FOUND SET oneAddr = null;
    OPEN curl;  # 打开游标
    FETCH curl INTO oneAddr; 
# 通过游标读取数据    WHILE(oneAddr is not null) DO  
# 使用 while...do 循环来遍历 addr 列      
set oneAddr = CONCAT(oneAddr, ';');      
set allAddr = CONCAT(allAddr, oneAddr);
      FETCH curl into oneAddr;    END WHILE;
    CLOSE curl; # 关闭游标    SELECT allAddr;  
  END;//call useCursor();
Nach dem Login kopieren

Methode 2:

drop procedure if exists useCursor;delimiter //CREATE PROCEDURE useCursor()
  BEGIN
    DECLARE oneAddr varchar(20) default '';
    DECLARE allAddr varchar(80) default '';
    DECLARE done INT DEFAULT 0; # 定义一个默认值0
    DECLARE curl CURSOR FOR SELECT addr FROM person.person;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN curl;    REPEAT  # 使用repeat循环来遍历addr列
      FETCH curl INTO oneAddr;      IF NOT done THEN
        set oneAddr = CONCAT(oneAddr, ';');        
set allAddr = CONCAT(allAddr, oneAddr);      END IF;    UNTIL done END REPEAT; #直到为0才结束循环
    CLOSE curl;    select allAddr;  END;//call useCursor();
Nach dem Login kopieren

Methode 3:

drop procedure if exists useCursor;delimiter //CREATE PROCEDURE useCursor()
  BEGIN
    DECLARE oneAddr varchar(20) default '';
    DECLARE allAddr varchar(80) default '';
    DECLARE done bool DEFAULT false; # 定义布尔变量,默认值为false
    DECLARE curl CURSOR FOR SELECT addr FROM person.person;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
    OPEN curl;
    personLoop: LOOP  #使用loop循环来遍历addr列
      FETCH curl INTO oneAddr;      IF done THEN
        LEAVE personLoop;      ELSE
        set oneAddr = CONCAT(oneAddr, ';');        
set allAddr = CONCAT(allAddr, oneAddr);      END IF;    END LOOP personLoop;
    CLOSE curl;    select allAddr;  END;//call useCursor();
Nach dem Login kopieren

3. Ergebnisse ausgeben

mysql> call useCursor();//
+---------------------------------+| allAddr                         |
+---------------------------------+| xianggang;taiwan;ximan;beijing; |
+---------------------------------+
Nach dem Login kopieren


Das Obige ist der Inhalt des [MySQL 10]-Cursors. Bitte achten Sie auf die chinesische PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage