sql游标

open cursor for sql

偶尔善良 提交于 2019-12-30 18:17:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> open cursor for sql 可以方便的执行动态sql. 动态sql和游标经常性结合在一起使用。 Oracle中Cursor介绍 关键字 概念 类型 异常处理 一 概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 二 类型 Cursor类型包含三种: 隐式Cursor,显式Cursor和Ref Cursor(动态Cursor)。 1. 隐式Cursor: 1).对于Select …INTO…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。例如:Select /Update / Insert/Delete操作。 2)作用:可以通过隐式Cusor的属性来了解操作的状态和结果,从而达到流程的控制。Cursor的属性包含: SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数 SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功 SQL%NOTFOUND 布尔型 与SQL

[ 转载 ] ORACLE存储过程

不打扰是莪最后的温柔 提交于 2019-12-30 16:46:28
一.什么是存储过程 存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。 简单的说就是专门干一件事一段sql语句。 可以由数据库自己去调用,也可以由java程序去调用。 在oracle数据库中存储过程是procedure。 二.为什么要写存储过程 1.效率高 存储过程编译一次后,就会存到数据库,每次调用时都直接执行。而普通的sql语句我们要保存到其他地方(例如:记事本 上),都要先分析编译才会执行。所以想对而言存储过程效率更高。 2.降低网络流量 存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。 3.复用性高 存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。 4.可维护性高 当功能要求发生小的变化时,修改之前的存储过程比较容易,花费精力少。 5.安全性高 完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。 三.存储过程基础 1.存储过程结构 (1).基本结构 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写

PyMySQL

江枫思渺然 提交于 2019-12-28 11:17:15
准备工作 使用python程序操作MySQL数据库 安装pymysql第三方包: sudo pip3 install pymysql 安装第三方包pip3 install 卸载第三方包pip3 uninstall pip3 list 查看使用pip命令安装的第三方包列表 ①导入pymysql包: import pymysql ②创建连接对象: 调用pymysql模块中的connect()函数来创建连接对象,代码如下: conn = connect(参数列表) *参数host: 连接mysql主机,如果是本机是’localhost’ *参数port: 连接的mysql主机的端口,默认是3306 *参数user: 连接的用户名 *参数password: 连接的密码 *参数database: 数据库的名称 *参数charset: 通信采用的编码方式,推荐使用utf8 连接对象操作说明: 关闭连接:conn.close() 提交数据:conn.commit() 撤销数据:conn.rollback() ③获取游标对象 获取游标对象的目标就是要执行sql语句,完成对数据库的增删改查操作 调用连接对象cursor()方法获取游标对象 cur = conn.cursor() 游标操作说明: 使用游标执行SQL语句: execute(operation [parameters ]) 执行SQL语句

SQL Server基础之游标

我怕爱的太早我们不能终老 提交于 2019-12-27 17:45:28
查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录。应用程序可以根据需要滚动或浏览其中的数据。本篇介绍游标的概念、分类、以及基本操作等内容。 一:认识游标   游标是 SQL Server 的一种数据访问机制,它允许用户访问单独的数据行。用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的 SQL 代码并立即执行或输出。 1. 游标的概念  游标是一种处理数据的方法,主要用于存储过程,触发器和 T_SQL 脚本中,它们使结果集的内容可用于其它 T_SQL 语句。在查看或处理结果集中向前或向后浏览数据的功能。类似与 C 语言中的指针,它可以指向结果集中的任意位置,当要对结果集进行逐条单独处理时,必须声明一个指向该结果集中的游标变量。   SQL Server 中的数据操作结果都是面向集合的,并没有一种描述表中单一记录的表达形式,除非使用 WHERE 子句限定查询结果,使用游标可以提供这种功能,并且游标的使用和操作过程更加灵活、高效。 2. 游标的优点   SELECT 语句返回的是一个结果集,但有时候应用程序并不总是能对整个结果集进行有效地处理,游标便提供了这样一种机制,它能从包括多条记录的结果集中每次提取一条记录,游标总是与一跳 SQL 选择语句相关联,由结果集和指向特定记录的游标位置组成

SQL中游标的使用

南笙酒味 提交于 2019-12-27 01:31:24
一般情况下,我们用SELECT这些查询语句时,都是针对的一行记录而言, 如果要在查询分析器中对多行记录(即记录集)进行读取操作时,则需要使用到游标或WHILE等循环。游标你是看不到的 游标都包含在对象里面 比如 存储过程 游标的类型: 1、静态游标(不检测数据行的变化) 2、动态游标(反映所有数据行的改变) 3、仅向前游标(不支持滚动) 4、键集游标(能反映修改,但不能准确反映插入、删除) 游标使用顺序: 1、定义游标 2、打开游标 3、使用游标 4、关闭游标 5、释放游标 Transact-SQL: declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS] for selet语句 [for update[of 列名[,列名]] 注:LOCAL 局部游标 GLOBAL 全局游标 FORWARD_ONLY 仅向前 SCROLL 滚动 STATIC 静态 KEYSET 键集 DYNAMIC 动态 READ_ONLY 只读 SCROLL_LOCKS 锁定游标当前行 获取游标的数据 FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE{ n | @nvar | RELATIVE {

db2 常见错误以及解决方案

送分小仙女□ 提交于 2019-12-27 01:05:32
操作数据库流程中,遇到许多疑问,很多都与SQL CODE和SQL State有关,现在把一个完整的SQLCODE和SQLState不正确信息和有关解释作以下说明,一来可以自己参考,对DB2不正确自行找出原由 (声明:这是搜集网上的资料得来的,细致出处不记得了) sqlcode sqlstate 说明 格式说明:ErrorCode:-302 SQLState:22001 ------------------------------------------- 000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互联系的引用 +098 01568 动态SQL语句用分号结束 +100 02000 没有找到满足SQL语句的行 +110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统 +111 01590 为2型索引配置了SUBPAGES语句 +117 01525 要插入的值的个数不等于被插入表的列数 +162 01514 指定的表空间被置为检查挂起状态 +203 01552 运用非唯一的名字来处理命名的限定列 +204 01532 命名的对象未在DB2中定义 +206 01533 命名的列不在SQL语句中指定的任何表中存在 +218 01537 因为SQL语句引用一个远程对象

MS SQL Server查询优化方法

折月煮酒 提交于 2019-12-26 19:54:24
查询速度慢的原因很多,常见如下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要. 2、纵向、横向分割表,减少表的尺寸(sp_spaceuse) 3、升级硬件 4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段 5、提高网速; 6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server?

Oracle的游标

十年热恋 提交于 2019-12-26 07:11:52
Oracle的游标 游标----- 内存中的一块区域,存放的是select 的结果 游标用来处理从数据库中检索的多行记录(使用 SELECT 语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。 为了处理 SQL 语句, Oracle 将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。 两种游标: 一、显示游标 (需要明确定义!) 显示游标被用于处理返回多行数据的 SELECT 语句,游标名通过 CURSOR….IS 语句显示地赋给 SELECT 语句。 在 PL/SQL 中处理显示游标所必需的四个步骤: 1 )声明游标; CURSOR cursor_name IS select_statement 2 )为查询打开游标; OPEN cursor_name 3 )取得结果放入 PL/SQL 变量中; FETCH cursor_name INTO list_of_variables; FETCH cursor_name INTO PL/SQL_record; 4 )关闭游标。 CLOSE cursor_name 注意:在声明游标时, select_statement 不能包含 INTO 子句。当使用显示游标时, INTO 子句是 FETCH 语句的一部分。 1、

sql游标循环

倖福魔咒の 提交于 2019-12-24 12:33:54
DECLARE @begindate DATETIME=CONVERT(DATETIME, '2019.05.06 09:40:50') ,@enddate DATETIME =GETDATE() ,@id INT DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT id FROM dbo.op_weight_cemskind_charge where ddate between @begindate and @enddate) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @id;--读取第一个游标值赋值给变量 WHILE @@FETCH_STATUS = 0 --游标值是否已经读取完毕 BEGIN SELECT * FROM dbo.op_weight_cemskind_charge WHERE id=@id FETCH NEXT FROM My_Cursor INTO @id; END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 来源: https://www.cnblogs.com/shuaimeng/p/10817961.html

SQl 游标

旧城冷巷雨未停 提交于 2019-12-24 12:33:29
declare @id nvarchar(20) DECLARE My_Cursor CURSOR --定义游标 FOR (select autoid from U_VoucherItems where CardNum='k006' and CardSection='B') --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @id; --读取第一行数据 WHILE @@FETCH_STATUS = 0 BEGIN update U_VoucherItems set CardItemNum=(select MAX(CardItemNum)+1 from U_VoucherItems where CardNum='k006' and CardSection='B' ) where CardNum='k006' and autoid=@id FETCH NEXT FROM My_Cursor INTO @id; --读取第一行数据 END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 来源: https://www.cnblogs.com/su-king/p/5121866.html