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. 初步认识MVC

     一丶路由(One) 自定义路由,静态路由,动态路由,组合路由 routes.MapRoute 二丶Action向View传值的四种方式(ViewData.ViewBag.TempData.Model ...

  2. 【转载】Spring注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  3. 解决docker容器启动时候无法映射端口的问题

    当我们停止防火墙后,docker容器启动映射端口可能无法映射端口,这个时候需要重建docker0网桥. 详细的错误是这样的: docker: Error response from daemon: d ...

  4. 2019西安多校联训 Day2

    试题链接:http://www.accoders.com/contest.php?cid=1894   考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...

  5. java基础学习日志--Stirng内存案例

    案例一: public class test1 { public static void mb_swap(String Str1,String Str2) { String temp=Str1; St ...

  6. Git安装使用指南

    Git安装使用指南 Git原理示意图 1. 安装git Linux服务器版本为Redhat6.2-64,其他版本可能有些许不同 1.1 安装依赖包 在安装git前首先安装依赖包,包括的依赖包有: cv ...

  7. Linux之 sed用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  8. Linux:RHEL7图形界面转文字

    1.7 Systemd初始化进程 Linux操作系统开机过程首先从BIOS开始→进入"Boot Loader"→加载系统内核→内核进行初始化→启动初始化进程.初始化进程作为系统第一 ...

  9. Ubuntu notes

    ubuntu notes Table of Contents 1. backup data 2. Basics Ubuntu 3. Install, uninstall packages 4. Bas ...

  10. plotting and saving over line in paraView

    probe -- provides the field values in a particular location in space To save plotoverline to csv fil ...