1.游标概念:

当在PL/SQL块中执行DML(增删改)时,Oracle会为其分配上下文区(Context Area),游标是指向上下文区的指针

2.  游标分类:

A.  隐式游标

a.  在PL/SQL中使用DML语句时自动创建隐式游标

b.  隐式游标自动声明、打开和关闭,其名为 SQL

c.  通过检查隐式游标的属性可以获得最近执行的DML 语句的信息

d.  隐式游标的属性有:

%FOUND – SQL 语句影响了一行或多行时为 TRUE

%NOTFOUND – SQL 语句没有影响任何行时为TRUE

%ROWCOUNT – SQL 语句影响的行数

%ISOPEN  - 游标是否打开,始终为FALSE

e. 隐式游标的错误处理:NO_DATA_FOUND:没有查询到任何行。TOO_MANY_ROWS:返回多行。

B.  显式游标

a.  显式 游标的使用步骤:

1)  声明显式游标语法:

CURSOR  游标名[(游标参数列表)] [RETURN  返回值规范]   IS   SELECT 语句   [FOR   UPDATE  OF   [列名列表]];

2)  打开显式游标语法:

OPEN  显式游标名 (参数列表);

3)   提取数据语法:

FETCH   游标名   INTO   记录或变量列表;

4)   关闭游标语法:

CLOSE   游标名;

b.  显式游标属性

显式游标名%属性

%FOUND – SQL 语句影响了一行或多行时为 TRUE

%NOTFOUND – SQL 语句没有影响任何行时为TRUE

%ROWCOUNT – SQL 语句影响的行数

%ISOPEN  - 游标是否打开,始终为FALSE

3. 循环游标 :

用于简化游标处理代码、当用户需要从游标中提取所有记录时使用

循环游标的语法如下:

FOR <record_index> IN <cursor_name>

LOOP

<executable statements>

END LOOP;

4. BULK COLLECT

为什么要使用BULK COLLECT?

提交PL/SQL中SELECT语句的查询效率。

原理:减少了PL/SQL与SQL引擎之间的开关次数,因而加速了数据获取的速度

语法:

... BULK COLLECT into 集合

5. REF 游标和游标变量:用于处理运行时动态执行的 SQL 查询

使用游标变量的步骤:

A.  创建游标变量需要两个步骤:

a.  声明 REF 游标类型

b.  声明 REF 游标类型的变量

用于声明 REF 游标类型的语法为:

TYPE <ref_cursor_name> IS REF CURSOR  [RETURN <return_type>];

用于声明REF 游标类型变量的语法:变量名   游标类型名;

B.  打开游标变量的语法如下:

OPEN cursor_name FOR select_statement;

C.  提取数据语法:

a.  FETCH  游标变量名   INTO   接收游标数据的变量 ……;

b.  FETCH   游标变量名  INTO  接收游标结果的集合变量  ….[LIMIT  rows];

D.  关闭游标变量语法:CLOSE   游标变量名 ;

6.  游标变量的优点和限制

A.  游标变量的优点有:

a. 可从不同的 SELECT 语句中提取结果集

b. 可以作为过程的参数进行传递

c. 可以引用游标的所有属性

d. 可以进行赋值运算

B.  使用游标变量的限制:

a. 不能在程序包中声明游标变量

b. FOR UPDATE子句不能与游标变量一起使用

c. 不能使用比较运算符

7.  动态SQL概述

A.  绑定

a.  编译器识别程序中的标识符存储位置的过程。

b.  分类:早期绑定与晚期绑定

B.  动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句

C.  DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行

D.  两种动态SQL技术

a.  DBMS_SQL包:Oracle 8i以前使用。

b.  本地动态SQL:Oracle 9i以后使用。

对比:本地动态SQL更简单、执行更快。

E.  执行动态SQL

a.  语法1:execute immediate 'sql语句字符串'

b.  语法2:open x for 'sql语句字符串'

8.  绑定变量

A.  为什么使用绑定变量:减少编译SQL的次数,提交执行效率

B.  绑定变量说明

execute immediate

'insert into t1(f1,f2) values(:a,:b)' using x,y;

注意: using后面的变量与绑定变量根据位置一一对应。  x-->a、y-->b

C.  绑定变量的使用

a. 在SQL*PLUS(命令窗口) 中使用绑定变量

只能在SQL*PLUS交互环境下使用。

b. 在PL/SQL(存储过程和函数)中使用绑定变量

参数引用的已经是绑定变量。

c.  在动态SQL中使用绑定变量

只能绑定字面量(替换具体的值)

不能替换数据库对象名称

d.  在JDBC中使用绑定变量

PreparedStatement对象

9. 动态SQL语法

语法1:execute immediate 'sql语句字符串'

语法2:open for 'sql语句字符串'

在PL/SQL使用游标获取数据及动态SQL的更多相关文章

  1. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  2. ajax异步获取数据后动态向表格中添加数据(行)

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 <!doctype html> ...

  3. 【PL/SQL系列】Oracle存储过程使用动态SQL

    Oracle存储过程相信大家都比较了解,下面就为您介绍Oracle存储过程使用动态SQL的方法,希望对您能够有所帮助. CREATE OR REPLACE PROCEDURE P_STAT_SCORE ...

  4. treeTable的使用(ajax异步获取数据,动态渲染treeTable)

    一.展示效果(treetable基本样式https://www.cnblogs.com/shuihanxiao/p/10413454.html) 二.html文件(若一个页面又多个treetable, ...

  5. 游标使用 和sp_executesql动态sql

    /****** Script for SelectTopNRows command from SSMS ******/ declare @oid int declare @cid int declar ...

  6. mybatis 的sql语句及使用mybatis的动态sql mybatis防注入

    由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接  :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...

  7. sql server rdl report 如何用动态sql

    我做rdl report 一般用存储过程,可是今天遇到个问题,需要用动态sql,rdl report数据集不能绑定字段 查了一下谷歌,解决如下: declare @CarrierList table ...

  8. sql 根据时间获取数据

    获取当月数据 MONTH(时间字段)=MONTH(GETDATE()) and year(时间字段)=year(GETDATE()) 计算两个时间差了多少分钟 DATEDIFF(mi,'7:00',c ...

  9. Oracle SQL Lesson (1) - 使用SQL Select语句获取数据

    第一节课: 启动数据库并且使用特定用户连接:su - oracle; 启动sqlplus并且使用sys连接:conn / as sysdba; 启动数据库:startup; 解锁用户:alter us ...

随机推荐

  1. php file_get_contents函数分段读取大记事本或其它文本文件

    当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可 ...

  2. vsCode scss安装

    点击在settings.json中编辑写入代码: { /** Easy Sass 插件 **/ "easysass.formats": [ { "format" ...

  3. Extjs查询实现

    效果图如上: 页面代码: Ext.QuickTips.init(); //放在图标上会自动提示信息 Ext.define('ExtApp.view.StudentList' , { extend : ...

  4. iview“官方“实现的右键菜单

    博客开篇,没想到第一篇博文竟然是前端的,虽略显尴尬,但正能量溢出,你我可能遇到同样问题,在这里分享下个人方案,希望对你有用. 官方目前不提供右键菜单,这里借助Dropdown(下拉菜单)来实现,故为“ ...

  5. Bat 脚本(常用命令)

    Bat 批处理脚本 (常用) Bat 批处理脚本 === Content === 1. Rem 和 :: Rem 为注释命令,能回显. :: 为符号注释,不能回显. %行内注释内容% ===== (不 ...

  6. UVA - 12661 Funny Car Racing (Dijkstra算法)

    题目: 思路: 把时间当做距离利用Dijkstra算法来做这个题. 前提:该结点e.c<=e.a,k = d[v]%(e.a+e.b); 当车在这个点的1处时,如果在第一个a这段时间内能够通过且 ...

  7. SQL Server数据库基础编程

    转载,查看原文 Ø Go批处理语句 用于同时执行多个语句 Ø 使用.切换数据库 use master go   Ø 创建.删除数据库 方法1. --判断是否存在该数据库,存在就删除 if (exist ...

  8. [bzoj3106][cqoi2013][棋盘游戏] (对抗搜索+博弈论)

    Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. l         A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. ...

  9. 百练2815:城堡问题(DFS)

    描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # ...

  10. Spring Tool Suite 安装

    第一步:到http://spring.io/tools/sts/all/上下载对应版本.(此处以博主Windows64位系统为例) 第二步: 进入eclipse,依次点击help-->Insta ...