sql游标

存储过程

心不动则不痛 提交于 2019-12-01 12:14:18
存储过程语法   创建过程 无参 create or replace procedure NoParPro as //声明 ; begin // 执行 ; exception//存储过程异常 ; end; 带参 create or replace procedure queryempname(sfindno emp.empno%type) //%type表示参数属性与表emp的empno字段一样 as sName emp.ename%type; sjob emp.job%type; begin .... exception .... end; 带参并赋值 create or replace procedure runbyparmeters (isal in emp.sal%type, sname out varchar, sjob in out varchar) as icount number; begin select count(*) into icount from emp where sal>isal and job=sjob; if icount=1 then .... else .... end if; exception when too_many_rows then DBMS_OUTPUT.PUT_LINE('返回值多于1行'); when others then

PL/SQL语言语法

ぐ巨炮叔叔 提交于 2019-12-01 08:29:00
PL/SQL语言语法 一、前言 SQL全称是“结构化查询语言(Structured Query Language)”,而PL/SQL是过程语言(Procedure Language),是对SQL的扩展。PL/SQL语言比任何其他程序设计语言(C、C++、java等)操作数据库的效率要高。 二、基本语法结构 declare --定义部分:包括定义变量、游标 /* 定义游标。有游标就肯定有打开游标、循环、关闭游标 * 小技巧:定义完游标后,游标需要的变量马上在后面定义,如定义ename,sal。 */ cursor cemp is select ename,sal from emp; pename emp.ename%type; --定义引用型变量(即引用emp表的ename列的类型,ename是什么类型pename也跟着是什么类型) psal number; --定义一般变量 /* 定义记录型变量(以 _rec 结尾):代表一行数据。如:select * into emp_rec from emp where empno='2'; * 使用:emp_rec.ename,emp_rec.sal */ emp_rec emp%rowtype; begin --打开游标 open cemp; loop fetch cemp into pename,psal; --获取一行数据 exit

SQL相关优化

拟墨画扇 提交于 2019-11-30 18:43:52
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/samjustin1/article/details/52314813 第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。   2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。   3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0   4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20  

pymysql 基操全套

江枫思渺然 提交于 2019-11-30 15:12:33
pymysql:python操作mysql 什么是pymysql? pymysql是一个python连接操作mysql数据的一个模块。 没有他我们就不能和mysql连接所以安装... 安装 >: pip3 install pymysql 什么是Cursor游标? 游标(Cursor)是处理 数据 的一种方法,为了查看或者处理 结果集中 的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段 语法 ​ conn.commit() 提交 ​ conn.cursor(pymysql.cursors.DictCursor)设置游标对象 ​ cursor.execute(sql) 执行语sql语句 ​ conn.cursor(pymysql.cursors.DictCursor)设置DictCursor ​ 特殊fetch 取 ​ 查询需要通过fetchone操作 ​ fetchmany(个数) ​ fetchall()全部 增删改查 增删改查之前需要自己创建数据库 # 选取操作的模块 pymysql # pymysql连接数据库的必要参数:主机、端口、用户名、密码、数据库 # 注:pymysql不能提供创建数据库的服务,数据库要提前创建 import pymysql from

Spring Batch(6)——数据库批数据读写

℡╲_俬逩灬. 提交于 2019-11-30 07:25:31
前序文章陆续介绍了 批处理的基本概念 , Job使用 、 Step控制 、 Item的结构 以及 扁平文件的读写 。本文将接着前面的内容说明数据库如何进行批处理读写。 数据读取 数据库是绝大部分系统要用到的数据存储工具,因此针对数据库执行批量数据处理任务也是很常见的需求。数据的批量处理与常规业务开发不同,如果一次性读取百万条,对于任何系统而言肯定都是不可取的。为了解决这个问题Spring Batch提供了2套数据读取方案: 基于游标读取数据 基于分页读取数据 游标读取数据 对于有经验大数据工程师而言数据库游标的操作应该是非常熟悉的,因为这是从数据库读取 数据流 标准方法,而且在Java中也封装了 ResultSet 这种面向游标操作的数据结构。 ResultSet 一直都会指向 结果集 中的某一行数据,使用 next 方法可以让游标跳转到下一行数据。Spring Batch同样使用这个特性来控制数据的读取: 在初始化时打开游标。 每一次调用 ItemReader::read 方法就从 ResultSet 获取一行数据并执行 next 。 返回可用于数据处理的映射结构(map、dict)。 在一切都执行完毕之后,框架会使用回调过程调用 ResultSet::close 来关闭游标。由于所有的业务过程都绑定在一个事物之上,所以知道到 Step 执行完毕或异常退出调用执行 close

Oracle---day03

懵懂的女人 提交于 2019-11-30 04:27:59
一、视图   对一个查询结果的封装(视图里面所有的数据都是来自于它查询的那张表,视图里面不存储任何数据)    视图的好处:1.能够封装复杂的查询结果          2.屏蔽表中的细节    语法: create [or replace] view 视图名字 as 查询语句 [with read only]       or replace --如果存在就覆盖       with read only --只允许读,不允许修改,一般都会加   同义词--就是给表、视图等取另外一个名字 --创建一个视图 create or replace view view_test1 as select ename,job,deptno from emp; --通过视图修改数据 update view_test1 set ename='SIMITH2' where ename = 'smith2'; --创建一个只读视图 create or replace view view_test2 as select ename,job,deptno from emp with read only; --同义词概念 create synonym yuangong for view_test2; select * from yuangong select * from view_test1; select

sql优化问题

最后都变了- 提交于 2019-11-29 19:03:33
数据库的优化问题 一、问题的提出  在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优 化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的 SQL语句,提高系统的可用性。   在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的 SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种 原则来删除索引,这有助于写出高性能的SQL语句。  二、SQL语句编写注意问题   下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。   1. IS NULL 与 IS NOT NULL   不能用null作索引

navicat工具 pymysql模块

怎甘沉沦 提交于 2019-11-29 05:01:31
目录 一 IDE工具介绍(Navicat) 二 ymysql模块 一 IDE工具介绍(Navicat)   生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mysql服务端的一个工具,并且他是图形界面版的。我们使用它和直接使用命令行的区别就类似linux和windows系统操作起来的一个区别。 下载链接:https://pan.baidu.com/s/1bpo5mqj   Navicat的安装教程看这篇博客: 点击 掌握: #1. 测试+链接数据库 #2. 新建库 #3. 新建表,新增字段+类型+约束 #4. 设计表:外键 #5. 新建查询 #6. 备份库/表 #注意: 批量加注释:ctrl+?键 批量去注释:ctrl+shift+?键 二 ymysql模块   我们要学的pymysql就是用来在python程序中如何操作mysql,它和mysql自带的那个客户端还有navicat是一样的,本质上就是一个套接字客户端,只不过这个套接字客户端是在python程序中用的,既然是客户端套接字,应该怎么用,是不是要连接服务端,并且和服务端进行通信啊,让我们来学习一下pymysql这个模块 #安装 pip3 install pymysql    一 链接、执行sql、关闭(游标)

pymysql 模块

丶灬走出姿态 提交于 2019-11-29 04:46:21
目录 一 IDE工具介绍(Navicat) 二 ymysql模块 一 IDE工具介绍(Navicat)   生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mysql服务端的一个工具,并且他是图形界面版的。我们使用它和直接使用命令行的区别就类似linux和windows系统操作起来的一个区别。 ​ 下载链接: https://pan.baidu.com/s/1bpo5mqj   Navicat的安装教程看这篇博客:点击 掌握: 1. 测试+链接数据库 2. 新建库 3. 新建表,新增字段+类型+约束 4. 设计表:外键 5. 新建查询 6. 备份库/表 注意: 批量加注释:ctrl+?键 批量去注释:ctrl+shift+?键 二 ymysql模块   我们要学的pymysql就是用来在python程序中如何操作mysql,它和mysql自带的那个客户端还有navicat是一样的,本质上就是一个套接字客户端,只不过这个套接字客户端是在python程序中用的,既然是客户端套接字,应该怎么用,是不是要连接服务端,并且和服务端进行通信啊,让我们来学习一下pymysql这个模块 安装 pip3 install pymysql   一 链接、执行sql、关闭(游标)     

oracle入门学习的一些小总结

守給你的承諾、 提交于 2019-11-28 20:39:02
1. 书写代码时,先把要书写的格式写出来,然后往内部填充内容,能降低代码的报错率。 2. 通过 :=& 这种弹框手动录入数据时,如果输入的是字符串时需要加单引号 3. 不能够通过循环来多次弹框录入数据,Oracle不支持(因为实际应用中不存在这种录入数据的情况)。 4. 注意书写存储过程中,传递的参数不要与数据库表中的列名一样,否则sql语句的执行会与预期的不同,并且很难找出原因 5. 在存储id主键数据时,如果在下面的sql语句中两张表内都用到了同一个id,这时,这个id需要从调用的地方生成并且传递过去,不能在sql执行的时候插入生成。 6. 语句报错时,大都是语法格式问题,查看分号是否少写,是否多写。 7. 一些语法区别要注意:如oracle的分支if有三种,有区别的就是if 条件 then elsif 条件 then else end if; 8.函数和存储过程很相似,但是存储过程主要用来书写业务逻辑,只为一个业务服务,里面写的时增删改查; 函数一般书写工具,在select中可以使用。 PL/SQL语法: A. 匿名代码块: declare 声明:数据类型、变量、常量(constant)、异常——⾃定义异常、游标 begin 代码块:核⼼代码基本都是sql语句。 exception 异常处理 end; B. 赋值:在declare中 直接赋值 变量名:=值; 输入框赋值