커서의 기능 및 속성 소개

rayZ
풀어 주다: 2017-07-26 09:24:27
원래의
3739명이 탐색했습니다.

커서의 기능과 속성

커서의 기능은 해당 작업을 수행하기 위해 쿼리 데이터베이스에서 반환된 레코드를 탐색하는 것입니다. 커서에는 다음과 같은 속성이 있습니다. 즉, 업데이트할 수 없습니다.

b. 커서는 한 방향으로만 이동할 수 있고, 레코드 간에 마음대로 전진하거나 후퇴할 수 없으며, 특정 레코드를 건너뛸 수 없습니다. . 테이블의 데이터를 업데이트할 때 커서를 열지 마십시오.

상대적으로 많은 양의 nt_m_gpsdata(3000W+) 데이터를 날짜에 따라 nt_m_gpsdata20170501, nt_m_gpsdata20170502, nt_m_gpsdata20170503 등으로 분할하는 기능을 구현합니다.

CREATE PROCEDURE `new_procedure` ()


BEGIN

-- 수신을 정의해야 합니다. 커서 데이터 변수

DECLARE a CHAR(16);

--새 테이블의 이름 정의

DECLARE tbname CHAR(30);

--SQL 문을 저장할 변수 정의

DECLARE sqlstr1 varchar( 300);

DECLARE sqlstr2 varchar(300);

-- 데이터 탐색의 끝 표시

DECLARE done INT DEFAULT FALSE;

-- 커서 정의

DECLARE cur CURSOR FOR select DISTINCT DATE_FORMAT(ctime,'%Y %m%d') as ctime from nt_m_gpsdata;

-- 끝 플래그를 커서에 바인딩

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

-- 커서 열기

OPEN cur;

-- 루프 시작

read_loop: LOOP

--커서에서 데이터를 추출합니다. 여기에는 하나만 있습니다. 여러 개가 있는 경우에도 동일하게 적용됩니다.

FETCH cur INTO a;

-- 명령문의 끝

IF done THEN

LEAVE read_loop;

END IF;做 - 여기서 하고 싶은 이벤트

Set Tbname = Concat ("NT_M_GPSDATA", a)

- 1=2 테이블 필드만 복사할 수 있습니다. . 필드 기본 키, 자동 증가, 비어 있지 않음 및 기타 속성은 복사할 수 없습니다. oldtable과 같은 테이블 생성은 필드 속성을 복사할 수 있습니다

    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;

-- 커서를 닫습니다

CLOSE cur;

END

나중에 이 테이블 분할 전략을 오라클 프로젝트에 적용하고 코드를 첨부했습니다

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;
로그인 후 복사

위 내용은 커서의 기능 및 속성 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿