sql游标

Oracle存储过程语法

大城市里の小女人 提交于 2019-12-20 11:29:23
存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名=param1; If (判断条件) then Select 列名 into 变量2 from 表A where列名=param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback; End; 注意事项: 1, 存储过程参数不带取值范围,in表示传入,out表示输出 2, 变量带取值范围,后面接分号 3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录 4, 用select 。。。into。。。给变量赋值 5, 在代码中抛异常用 raise+异常名 以命名的异常 命名的系统异常 产生原因 ACCESS_INTO_NULL 未定义对象 CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置

pymysql模块的使用

旧城冷巷雨未停 提交于 2019-12-20 00:54:35
本节重点: pymysql的下载和使用 execute()之sql注入 增、删、改:conn.commit() 查:fetchone、fetchmany、fetchall 一、pymysql的下载和使用   之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事先安装。 (1)pymysql模块的下载 pip3 install pymysql (2)pymysql的使用 数据库和数据都已存在 # 实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中) import pymysql user = input('请输入用户名:') pwd = input('请输入密码:') # 1.连接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8') # 2.创建游标 cursor = conn.cursor() #注意%s需要加引号 sql = "select * from userinfo where username='%s' and pwd='%s'" %(user,

oracle游标的使用

大憨熊 提交于 2019-12-19 11:52:18
游标的概念 游标相当于一个内存工作区,由系统或用户以变量的形式定义。 游标的作用就是用于临时存储从数据库中提取的数据块。 使用游标时,系统把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库,达到数据处理的速度提高的目的(频繁的磁盘数据交换会降低效率)。 游标的分类 隐式游标: select ordid into lordid 这种单行操作,一次只能从数据库中提取一行数据时,系统都会使用一个隐式游标。 隐式游标属性: SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数 SQL%FOUND 布尔型 值为 TRUE代表插入、删除、更新或单行查询操作成功 SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反 SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假 用法举例: create or replace function zf_test return varchar is error varchar(100); lempname varchar(10); pragma AUTONOMOUS_TRANSACTION; begin update tablename e set e.empname = 'hahh' where e.empid like '888888%'; DBMS_output.put_line

处理超出打开游标的最大数异常(ORA-01000: maximum open cursors exceeded)

风流意气都作罢 提交于 2019-12-19 09:59:44
在执行如下代码时,经常会出现ora-01000: maximum open cursors exceeded异常 for(int i=0;i<balancelist.size();i++) { prepstmt = conn.prepareStatement(sql[i]); prepstmt.setBigDecimal(1,nb.getRealCost()); prepstmt.setString(2, adclient_id); prepstmt.setString(3, daystr); prepstmt.setInt(4, ComStatic.portalId); prepstmt.executeUpdate(); } 1. 检查数据库中的 OPEN_CURSORS 参数值。 Oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游标数。缺省值为 50。要获得数据库中 OPEN_CURSORS 参数的值,可以使用以下查询: SQL> show parameter open_cursors; NAME TYPE VALUE ------------------------------------ ----------- --------------- open_cursors integer 1000 重要的是将

大数据量数据库优化

血红的双手。 提交于 2019-12-19 06:31:06
大数据量数据库优化 一、数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的。 在一个系统分析、设计阶段,因为数据量较小,负荷较低。我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。 所以在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。(例如:对外统计系统在7月16日出现的数据异常的情况,并发大数据量的的访问造成,数据库的响应时间不能跟上数据刷新的速度造成。具体情况是:在日期临界时(00:00:00),判断数据库中是否有当前日期的记录,没有则插入一条当前日期的记录。在低并发访问的情况下,不会发生问题,但是当日期临界时的访问量相当大的时候,在做这一判断的时候,会出现多次条件成立,则数据库里会被插入多条当前日期的记录,从而造成数据错误。),数据库的模型确定下来之后,我们有必要做一个系统内数据流向图,分析可能出现的瓶颈。 为了保证数据库的一致性和完整性,在逻辑设计的时候往往会设计过多的表间关联,尽可能的降低数据的冗余。(例如用户表的地区

SQL 游标

人走茶凉 提交于 2019-12-19 04:10:38
DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor ; --读取第一行数据 WHILE @@FETCH_STATUS = 0 BEGIN --UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新 --DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除 FETCH NEXT FROM My_Cursor; --读取下一行数据 END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 GO DECLARE @UserId varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT UserId FROM dbo.MemberAccount) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO

SQL server操作要点

巧了我就是萌 提交于 2019-12-17 02:19:30
SQL基础操作:说明:【】是可省略的项 A是可视化操作 B是SQL操作 概念模型:用e-r图表示,逻辑模型:把e-r图转换为关系模式(类似:A(a,b,c)) 物理模型是mdf文件 索引 索引对应的是内模式部分,基本表对应的是模式部分,而视图对应的是外模式部分。 创建: A:点击对应的数据库☛右击对应的表的索引结点☛新建索引然后命名添加对应的列 B: create 【unique】【cluster/noncluster】index 索引名 on 表(列名) 修改: A: B: alter index 索引名 on 表(列名)rebulid/重新生成/reorganize/重新组织索引/disable/禁用索引/ 删除: A:点击索引下面的对应的索引然后点击删除 B: drop index 索引名 on 表【列名】 视图 创建: A:右击视图☛新建视图☛选中相应的表☛关闭添加表☛选中对应的列名 B: create view 视图名 as select语句 使用: Select * from 视图名 修改: B: alter view 视图名 as 新的select语句 更新:(视图更新的数据也会存入原表) B: update 视图名 set 列名=‘新值’ 插入: B: insert 视图名 values (新值) 删除: B: drop view 视图名 存储过程 创建:

Oracle日常

大憨熊 提交于 2019-12-16 22:22:08
Xmltype select extractvalue(value(x), '//utext') value from table(XMLSEQUENCE(extract(v_xmlContent, '//utext'))) x; 该sql能够提取出xmltype类型数据中,所有<utext></utext>标签下的值。 SYS_REFCURSOR 动态游标的使用 SYS_REFCURSOR为动态游标,可在运行的时候动态决定执行查询。 REF游标可作为参数传递(in/out都可以)。 需注意的是,用于接收游标结果集的变量,其type与游标结果集必须完全一致,也就是列数量与数据类型能一一对应。 CREATE OR REPLACE PROCEDURE p_refcursor IS v_cur SYS_REFCURSOR; --定义动态游标 TYPE t_type IS RECORD( v_id VARCHAR2(3000), v_content clob); --自定义结果集类型 v_result t_type; --定义一个t_type类型的变量,用来存放后续查询结果,或table%rowtype --v_result test%rowtype; v_sql VARCHAR(3000); BEGIN v_sql := 'select uniqueid,name from test';

Oracle 数据库 - PL/SQL 游标

北慕城南 提交于 2019-12-12 11:04:45
目录 PL/SQL 游标 1、显式游标 1)、声明游标 2)、打开游标 3)、读取游标 4)、关闭游标 2、游标属性 3、隐式游标 4、通过 for 语句循环游标 实例——使用游标查询工资小于 1000 元的员工工资 实验:游标提取比指定员工工资少的员工信息 PL/SQL 游标 游标提供了一种从表中检索数据并进行操作的灵活手段,游标主要用在服务器上,处理由客户端发送给服务器端的 SQL 语句,或是批处理、存储过程、触发器中的数据处理请求。 游标的作用就相当于指针 ,通过游标 PL/SQL 程序可以一次处理查询结果集中的一行,并可以对该行数据执行特定操作 ,从而为用户在处理数据的过程中提供很大方便。 在 Oracle 中,通过游标操作数据主要使用显式游标和隐式游标。另外,还包括具有引用类型特性的 REF 游标。在这里仅介绍前两种经常使用的显式游标和隐式游标。 1、显式游标 显式游标是由用户声明和操作的一种游标,通常用于操作查询结果集(即由 select 语句返回的查询结果), 使用它处理数据的步骤包括:声明游标、打开游标、读取游标和关闭游标4个步骤 。其中读取游标可能是个反复操作的步骤,因为游标每次只能读取一行数据,所以 对于多条记录,需要反复读取,直到游标读取不到数据为止 。 1)、声明游标 声明游标主要包括游标名称和为游标提供结果集的 select 语句。因此,在声明游标时

sql 查询慢的48个原因分析

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-11 18:45:04
还是一转帖,总结的不错,大家借鉴。 原网址: http://database.ctocio.com.cn/222/9068222.shtml 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