📅  最后修改于: 2023-12-03 15:00:44.693000             🧑  作者: Mango
FETCH
语句被用来从一个游标中获取数据行。游标必须在执行 OPEN
语句时已经被定义并打开,可以是显式或隐式。
语法如下:
FETCH cursor_name INTO variable_name [, variable_name];
其中,cursor_name
是游标的名称, variable_name
是接收游标数据的变量名。可以有多个 variable_name
,用逗号隔开。
以下是一个使用 FETCH
语句的示例:
DECLARE
cursor emp_cursor IS SELECT * FROM employees;
my_emp employees%ROWTYPE;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO my_emp;
CLOSE emp_cursor;
END;
在上述代码中,我们定义了一个名为 emp_cursor
的游标,它从 employees
表中获取所有行。我们然后使用一行 SELECT 语句来把所有数据行选择到该游标. 接下来,我们打开游标(使用 OPEN
语句),然后从游标中获取一行数据(使用 FETCH
语句),并把该行数据存储在 my_emp
中。
最后,我们用 CLOSE
语句关闭游标。
FETCH
通过将下一行数据从游标传送到给定变量,可以方便地从活动游标中提取数据。每个 FETCH
语句后,游标向前移动一行数据,直到游标的末端。
FETCH
有两种类型,分别是 INTO
和 BULK COLLECT INTO
。
INTO
获取一行数据。如果游标返回了多余一行的数据,则返回一个 TOO_MANY_ROWS 异常。BULK COLLECT INTO
获取多行数据。它使用一次 FETCH
获取多行数据,然后把这些数据全部保存到一个 PL/SQL 表中。执行时,FETCH
语句从游标中取一批数据,并把这些数据逐一放置到绑定变量表的数组中。 最终,绑定变量表里的所有数据都将被传给数组。由于游标常常与循环结合使用,所以使用 FETCH
时要格外小心影响复杂的查询性能已经占用服务器资源,所以在使用时请注意查询量及服务器压力。
参考文献:Oracle FETCH