视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle游标与绑定变量
2020-11-09 10:56:04 责编:小采
文档


Oracle执行SQL语句就是打开游标,解析游标,执行游标,关闭游标的过程。了解游标的这几个阶段,我们也就弄清楚了SQL执行过程,这

Oracle执行SQL语句就是打开游标,解析游标,执行游标,关闭游标的过程。了解游标的这几个阶段,我们也就弄清楚了SQL执行过程,这是本文要介绍的第一个内容。另外,在java编程中,,我们通常说要使用预处理的形式来写SQL语句(比如:select * from table where A = ?),也就是绑定变量的形式。因为,这样效率高。那么,为什么使用绑定变量就比不使用绑定变量(比如:select * from table where A = '123')要效率高呢?这是本文要介绍的第二个内容。

一. 游标的生命周期

一条sql语句的执行过程,就是一个游标的生命周期。如下图所示:

1. 打开游标:系统为这个游标分配一个内存结构。

2. 解析游标:将一条SQL与这个游标关联。解析这条sql语句,将解析的结果加载到共享池中。

3. 定义输出变量:如果这条SQL返回数据,先定义接收数据的变量。

4. 定义输入变量:如果SQL语句使用了绑定变量,提供他们的值。

5. 执行游标:执行SQL语句。

6. 获取游标:如果SQL语句有返回数据,接收返回的数据。

7. 关闭游标:释放第一步分配的内存,供其他游标使用,但是第二步解析的SQL结果(也就是共享游标)不会被释放,以期待被重新使用。

我们可以通过一段PL/SQL代码来看一下游标的这几个步骤:

DECLARE
l_ename emp.ename%TYPE := 'SCOTT';
l_empno emp.empno%TYPE;
l_cursor INTEGER;
l_retval INTEGER;
BEGIN
l_cursor := dbms_sql.open_cursor; /*打开游标*/
dbms_sql.parse(l_cursor, 'SELECT empno FROM emp WHERE ename = :ename', 1); /*解析游标*/
dbms_sql.define_column(l_cursor, 1, l_empno); /*定义输出变量*/
dbms_sql.bind_variable(l_cursor, ':ename', l_ename); /*定义输入变量*/
l_retval := dbms_sql.execute(l_cursor); /*执行游标*/
IF dbms_sql.fetch_rows(l_cursor) > 0 /*获取游标*/
THEN
dbms_sql.column_value(l_cursor, 1, l_empno);
dbms_output.put_line(l_empno);
END IF;
dbms_sql.close_cursor(l_cursor); /*关闭游标*/
END;

下载本文
显示全文
专题