sql游标

【Transact-SQL】让人快遗忘的游标

断了今生、忘了曾经 提交于 2019-12-11 00:04:57
原文: 【Transact-SQL】让人快遗忘的游标 最初学SQL Server的时候,当学到游标的时候,突然有了一种亲切感,因为这种通过一个while循环,一条一条的处理数据的方式,很像学过的过程式语言,与C语言很相似。 慢慢的,对一些稍微复杂一点的SQL ,往往就会想到用游标去处理。也正是因为大量使用,渐渐的,在使用的过程中,也真正体会到了游标的低效,一条一条的处理方式,在数据量很小的情况下还可以,当数据一旦很多,而处理过程又非常复杂时,往往速度就会很慢。 于是乎,慢慢的开始放弃使用游标,最后都快忘记了这个老朋友了。 今天,在论坛突然发现有人提了一个问题,希望用游标来解决,于是乎,又让我再次想起了游标。 下面是那个网友提出的问题: 我有两张表,分别是:table1 KHMC SPDM DJ SL XSSL 广西骆俊峰 5609B 100.0000 12 NULL 广西骆俊峰 5609B 80.0000 7 NULL 广西骆俊峰 5609B 60.0000 6 NULL 广西骆俊峰 5609B 50.0000 13 NULL 广西骆俊峰 5609B 40.0000 21 NULL table2 khmc spdm sl bysl 广西骆俊峰 5609B 20 NULL 而我想要的结果是用第二张表里的数据去一行行的填充第一个表的数据(关联关系是 khmc,spdm): KHMC

python操作数据库

蹲街弑〆低调 提交于 2019-12-07 22:42:26
Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便。它的最大优点是使用方便,功能相比于其它大型数据库来说,确实有些差距。但是性能表现上,SQLITE并不逊色。麻雀虽小,五脏俱全, sqlite 实现了多数 sql-92 的标准,比如说 transaction 、 trigger 和复杂的查询等。 python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步(假设数据库模块名为db): 用db.connect创建数据库连接,假设连接对象为conn 如果该数据库操作不需要返回结果,就直接用conn.execute查询,根据数据库事务隔离级别的不同,可能修改数据库需要conn.commit 如果需要返回查询结果则用conn.cursor创建游标对象cur, 通过cur.execute查询数据库,用cur.fetchall/cur.fetchone/cur.fetchmany返回查询结果。根据数据库事 务隔离级别的不同,可能修改数据库需要conn.commit 关闭cur, conn 数据库连接对象: 打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作: commit()–事务提交 rollback()–事务回滚 close()

游标

纵然是瞬间 提交于 2019-12-06 09:52:16
游标 概念 游标可以对一个 select 的结果集进行处理,或是不需要全部处理,就会返回一个对记录集进行处理之后的结果。 游标实际上是一种能从多条数据记录的结果集中每次提取一条记录的机制。游标可以完成: # 允许定位到结果集中的特定行 # 从结果集的当前位置检索一行或多行数据 # 支持对结果集中当前位置的进行修改 由于游标是将记录集进行一条条的操作,所以这样给服务器增加负担,一般在操作复杂的结果集的情况下,才使用游标。 SQL Server 2005 有三种游标: T-SQL 游标、 API 游标、客户端游标。 游标的基本操作 游标的基本操作有定义游标、打开游标、循环读取游标、关闭游标、删除游标。 定义游标 d eclare cursor_name -- 游标名称 cursor [local | global] -- 全局、局部 [forward only | scroll] -- 游标滚动方式 [read_only | scroll_locks | optimistic] -- 读取方式 for select_statements -- 查询语句 [for update | of column_name ...] -- 修改字段 参数: forward only | scroll : 前一个参数,游标只能向后移动;后一个参数,游标可以随意移动 read_only : 只读游标

数据库 游标

拈花ヽ惹草 提交于 2019-12-06 03:21:59
转自 https://blog.csdn.net/liujiahan629629/article/details/18014051 以前也接触过游标,但是打心里说不是太理解,通过这次学习感觉理解深刻了很多,特此总结学习一下。 一,游标是什么? 游标是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时放到了一个内存区域的虚表中,而这个虚表就是游标。 二,作用是什么? 1,大家都知道数据库中的事物可以回滚,而游标在其中起着非常重要的作用,由于对数据库的操作我们会暂时放在游标中,只要不提交,我们就可以根据游标中内容进行回滚,在一定意义有利于数据库的安全。 2,另外,在Oracle中PL/SQL只能返回单行数据,而游标弥补了这个不足。相当于ADO.NET中的Data table吧。 三,类型: 1,隐式游标:增删改等操作Oracle都会自动创建游标,暂时保存操作结果,也就是能够回滚的操作都会引发游标的创建。 2,显示游标:由开发人员通过程序显式控制,用于从表中取出多行数据,并将多行数据一行一行的单独进行处理. 四,属性: 属性 注释 %rowcount 受SQL影响的行数 %found Boolean值,是否还有数据 %notfound Boolean值,是否已无数据 %isopen 游标是否打开

plsql-游标

不打扰是莪最后的温柔 提交于 2019-12-06 02:38:13
简介:游标的使用,处理多行数据(类似于java中的Iterator迭代器,用于集合的遍历),游标基本不处理,直接把结果返回给程序处理,例如java的list    4.1显示游标      (1)定义游标 (2)打开游标 (3)提取游标 (4)对游标进行循环操作:判断游标中是否有下一条记录 (5)关闭游标    4.2隐式游标游标判断:游标属性     %FOUND    布尔型属性,当最近一次读记录时成功返回,则值为TRUE;      %NOTFOUND 布尔型属性,与%FOUND相反;      %ISOPEN 布尔型属性,当游标已打开时返回TRUE;      %ROWCOUNT 数字型属性,返回已从游标中读取的记录数; 1.基本使用方法,while循环 --要求: 打印出 80 部门的所有的员工的工资:salary: xxx declare --1. 定义游标 cursor salary_cursor is select salary from employees where department_id = 80; v_salary employees.salary%type; begin --2. 打开游标 open salary_cursor; --3. 提取游标,(单个值) fetch salary_cursor into v_salary; --正确的做法,循环

SQL 循环语句几种写法

陌路散爱 提交于 2019-12-05 19:01:54
1、正常循环语句 declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Orders varchar(255)) declare @n int,@rows int insert #ttableName(orders) select orderNum from pe_Orders where orderId<50 --select @rows=count(1) from pe_Orders select @rows =@@rowcount set @n=1 while @n<=@rows begin select @orderNum=OrderNum from PE_Orders where OrderNum=(select Orders from #ttableName where id=@n) print (@OrderNum) select @n=@n+1 end drop table #ttableName 2、不带事务的游标循环 declare @orderN varchar(50)  --临时变量,用来保存游标值 declare y_curr cursor for   --申明游标 为orderNum select orderNum from pe_Orders where

SQL Server查询优化方法

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

SQL中游标的使用

℡╲_俬逩灬. 提交于 2019-12-05 16:41:43
SQL中游标的使用 类型:   1.普通游标 只有NEXT操作   2.滚动游标 有多种操作 1.普通游标 DECLARE @username varchar(20),@UserId varchar(100) DECLARE cursor_name CURSOR FOR --定义游标 SELECT TOP 10 UserId,UserName FROM UserInfo ORDER BY UserId DESC OPEN cursor_name --打开游标 FETCH NEXT FROM cursor_name INTO @UserId,@username --抓取下一行游标数据 WHILE @@FETCH_STATUS = 0 BEGIN PRINT '用户ID:'+@UserId+' '+'用户名:'+@username FETCH NEXT FROM cursor_name INTO @UserId,@username END CLOSE cursor_name --关闭游标 DEALLOCATE cursor_name --释放游标 结果: 用户ID:zhizhi 用户名:邓鸿芝 用户ID:yuyu 用户名:魏雨 用户ID:yujie 用户名:李玉杰 用户ID:yuanyuan 用户名:王梦缘 用户ID:YOUYOU 用户名:lisi 用户ID:yiyiren 用户名

Python 操作MySQL 数据库

旧城冷巷雨未停 提交于 2019-12-05 06:08:54
Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问 Python数据库接口及API 查看详细的支持数据库列表。 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。 Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。 Python DB-API使用流程: 引入 API 模块。 获取与数据库的连接。 执行SQL语句和存储过程。 关闭数据库连接。 什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API

PLSQL编程

回眸只為那壹抹淺笑 提交于 2019-12-04 09:25:36
PLSQL编程 一、变量 声名变量 变量名 变量类型(变量长度) 例如:v_name varchar2(20); 变量赋值 2.1 直接赋值 v_name varchar2(20) := '张三' 2.2 语句赋值,使用select...into...赋值 -- 打印人员个人信息,包括:姓名、薪水、地址 DECLARE --姓名,直接赋值 v_name VARCHAR2(20) := '张三'; --薪水 v_sal NUMBER; --地址 v_addr ARCHAR2(200); BEGIN v_sal := 1580; --语句赋值 SELECT '字段名' INTO v_addr FROM dual; --打印输出 dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal||',地址:'||v_addr); END; 引用型变量 变量的类型和长度取决于表中字段的类型和长度 通过表明.字段名%TYPE指定变量的类型和长度,例如:v_name emp.name%TYPE; -- 查询emp表中7839号员工的个人呢信息,包括姓名和薪水 DECLARE --姓名 v_name emp.name%TYPE := '张三'; --声名变量直接赋值 --薪水 v_sal emp.sal%TYPE; BEGIN select ename,sal