


显示游标
Step 1
定义游标
静态游标定义:

CURSOR C1 IS
SELECT section_name, place_id FROM hr.sections WHERE section_id <= 50;
CURSOR C2(sect_id INTEGER) IS
SELECT section_name, place_id FROM hr.sections WHERE section_id <= sect_id;
动态游标定义:

TYPE CURSOR_TYPE IS REF CURSOR;

C1 SYS_REFCURSOR;
Step 2
打开游标
静态游标打开:

OPEN C2(10);
动态游标打开:

SQL_STR := 'SELECT section_name, place_id FROM hr.sections WHERE section_id <= :DEPT_NO;';
OPEN C3 FOR SQL_STR USING 50;
Step 3
提取游标数据
Step 3
提取游标数据

FETCH C3 INTO DEPT_NAME, DEPT_LOC;
Step 4
循环处理游标数据
Step 4
循环处理游标数据
LOOP
FETCH C INTO V_EMPNO, V_SAL;
EXIT WHEN C%NOTFOUND;
IF V_SAL<=3000 THEN
UPDATE hr.staffs_t1 SET salary =salary + 500 WHERE staff_id = V_EMPNO;
END IF;
END LOOP;
Step 5
关闭游标
Step 5
关闭游标

CLOSE C1;--关闭游标
游标属性

LOOP
--通过游标取值
FETCH C1 INTO DEPT_NAME, DEPT_LOC;
EXIT WHEN C1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(DEPT_NAME||'---'||DEPT_LOC);
END LOOP;
CLOSE C1;--关闭游标
SET CURRENT_SCHEMA = 'hr';
DROP TABLE IF EXISTS sections;
CREATE TABLE sections(section_id INT, section_name VARCHAR(100), place_id NUMBER(4)) DISTRIBUTE BY HASH(section_id);
INSERT INTO sections VALUES (1, 'section_name1', 1),(2, 'section_name2', 2),(3, 'section_name3', 3);
section_name3---3
section_name1---1
section_name2---2
section_name1---1
section_name2---2
section_name3---3
section_name1---1
section_name2---2
section_name3---3
cursor_proc1
--------------
(1 row)
postgres-# C1 SYS_REFCURSOR;
postgres-# TEMP NUMBER(4);
postgres-# BEGIN
postgres$# proc_sys_ref(C1);
postgres$# LOOP
postgres$# FETCH C1 INTO TEMP;
postgres$# DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT);
postgres$# EXIT WHEN C1%NOTFOUND;
postgres$# END LOOP;
postgres$# END;
postgres$# /
1
2
3
3
ANONYMOUS BLOCK EXECUTE
隐式游标
总结
复习一下:隐式游标属性有哪些?
抽屉里好像
藏了什么东西
……
点此拉开抽屉,一探究竟
拉开抽屉丨查看答案哦
华为云GaussDB(DWS)携手兴盛优选,一站式实现数据业务科学决策 NEW
华为云GaussDB(DWS)助招行摘得2021 IDC中国金融行业技术应用场景创新奖 HOT
数据仓库GaussDB(DWS)蝉联“2021 中国大数据·数据仓库领域最佳产品奖”
华为云GaussDB(DWS)数据仓库以2048大规模节点通过信通院评测认证 数仓性能调优必读,带你进阶为性能调优高手


文章转载自GaussDB DWS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




