游標(biāo)的作用及屬性介紹
發(fā)表時(shí)間:2023-08-01 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]游標(biāo)的作用及屬性游標(biāo)的作用就是用于對查詢數(shù)據(jù)庫所返回的記錄進(jìn)行遍歷,以便進(jìn)行相應(yīng)的操作;游標(biāo)有下面這些屬性: a、游標(biāo)是只讀的,也就是不能更新它; b、游標(biāo)是不能滾動(dòng)的,也就是只能在一個(gè)...
游標(biāo)的作用及屬性游標(biāo)的作用就是用于對查詢數(shù)據(jù)庫所返回的記錄進(jìn)行遍歷,以便進(jìn)行相應(yīng)的操作;游標(biāo)有下面這些屬性:
a、游標(biāo)是只讀的,也就是不能更新它;
b、游標(biāo)是不能滾動(dòng)的,也就是只能在一個(gè)方向上進(jìn)行遍歷,不能在記錄之間隨意進(jìn)退,不能跳過某些記錄;
c、避免在已經(jīng)打開游標(biāo)的表上更新數(shù)據(jù)。
實(shí)現(xiàn)功能,將數(shù)據(jù)量比較大的nt_m_gpsdata(3000W+),按日期拆分成如nt_m_gpsdata20170501,nt_m_gpsdata20170502,nt_m_gpsdata20170503等
CREATE PROCEDURE `new_procedure` ()
BEGIN
-- 需要定義接收游標(biāo)數(shù)據(jù)的變量
DECLARE a CHAR(16);
-- 定義新建表名
DECLARE tbname CHAR(30);
-- 定義存放sql語句的變量
DECLARE sqlstr1 varchar(300);
DECLARE sqlstr2 varchar(300);
-- 遍歷數(shù)據(jù)結(jié)束標(biāo)志
DECLARE done INT DEFAULT FALSE;
-- 定義游標(biāo)
DECLARE cur CURSOR FOR select DISTINCT DATE_FORMAT(ctime,'%Y%m%d') as ctime from nt_m_gpsdata;
-- 將結(jié)束標(biāo)志綁定到游標(biāo)
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打開游標(biāo)
OPEN cur;
-- 開始循環(huán)
read_loop: LOOP
-- 提取游標(biāo)里的數(shù)據(jù),這里只有一個(gè),多個(gè)的話也一樣;
FETCH cur INTO a;
-- 聲明結(jié)束的時(shí)候
IF done THEN
LEAVE read_loop;
END IF;
-- 這里做你想做的循環(huán)的事件
set tbname=CONCAT("nt_m_gpsdata",a);
-- select tbname;
-- 復(fù)制表結(jié)構(gòu),create table newtable select * from oldtable where 1=2 只能復(fù)制表字段,無法復(fù)制字段主鍵、自增、非空等屬性 create table newtable like oldtable 可以復(fù)制字段屬性
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;
END LOOP;
-- 關(guān)閉游標(biāo)
CLOSE cur;
END
后來又將這個(gè)分表策略應(yīng)用到一個(gè)oracle項(xiàng)目,附上代碼
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;
以上就是游標(biāo)的作用及屬性介紹的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。