Oracle总结二

游标

参考博客:https://www.cnblogs.com/sc-xxarchive/2011/12/03/2275084.html

  1. Oracle中游标分为显示游标和隐式游标
  2. 显示游标使用 cursor…is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理
  3. 隐式游标是在执行插入(insert),删除(delete),修改(update)和返回单条记录查询(select)语句时有PL/SQL自动定义的
  4. 显示游标的操作:打开游标,操作游标,关闭游标;PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它。

Oracle中字符串用什么连接?

oracle中使用||这个符合连接字符串 如 ‘abc’ || ‘d’ 结果是abcd

Oracle中如何进行分页查询

Oracle 中使用 rownum 来进行分页, 这个是效率最好的分页方法,hibernate 也是使用 rownum 来进行 Oralce分页的
select * from
(select rownum r,a from tabName where rownum <=20)
where r > 10

存储过程与存储函数的特点与区别

特点
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象
3. 存储过程一般作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面

区别
1. 函数有返回值,过程没有
2. 函数可以单独执行,而过程必须通过execute执行
3. 函数可以嵌入SQL语句中,而过程不行
其实我们可以将比较复杂的查询写成函数.然后到存储过程中去调用这些函数.

存储过程与SQL对比

优势:
1. 提高性能SQL,语句在创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划,这样,在执行过程时便可节省此开销。
2. 降低网络开销,存储过程调用时只需用提供存储过程名和必要的参数信息,从而可降低网络的流量。
3. 便于进行代码移植,数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。
4. 更强的安全性
1. 系统管理员可以对执行的某一个存储过程进行权限限制,避免非授权用户对数据的访问
2. 在通过网络调用过程时,只有对执行过程的调用是可见的。因此,恶意用户无法看到表和数据库对象名称、嵌入自己的 Transact-SQL 语句或搜索关键数据。
3. 使用过程参数有助于避免 SQL 注入攻击。 因为参数输入被视作文字值而非可执行代码,所以,攻击者将命令插入过程内的 Transact-SQL 语句并损害安全性将更为困难。
4. 可以对过程进行加密,这有助于对源代码进行模糊处理。

劣势:
1. 存储过程需要专门的数据库开发人员进行维护,但实际情况是,往往由程序开发员人员兼职
2. 设计逻辑变更,修改存储过程没有 SQL 灵活

存储过程和SQL语句如何选择

1. 在一些高效率或者规范性要求比较高的项目,建议采用存储过程
2. 对于一般项目建议采用参数化命令方式,是存储过程与 SQL 语句一种折中的方式
3. 对于一些算法要求比较高,涉及多条数据逻辑,建议采用存储过程

触发器的作用有哪些?

  1. 触发器可通过数据库中相关表实现联级更改;通过级联引用完整性约束可以更有效地执行这些更改
  2. 触发器可以强制比用CHECK约束定义的约束更为复杂。与CHECK约束不同,触发器可以引用其他表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或
    显示用户定义错误信息。
  3. 触发器还可以强制执行业务规则
  4. 触发器也可以评估数据修改前后状态,并根据其差异采取对策

在千万级数据查询中,如何提高效率?

  1. 数据库设计方面
    a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by 涉及的列上建立索引
    b. 应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
    c. 并不是所有查询都有效,SQL是根据表中的数据进行查询优化,当索引列有大量数据重复时,查询可能不会去利用索引, 如一表中有字段 sex,male、female 几乎各一半,那么即使在 sex 上建了索引也对查询效率起不了作用。
    d. 索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可能会
    e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列,那么需要考虑是否应将该索引建为索引。
    f. 避免频繁创建和删除临时表,以减少系统表的资源消耗

2.SQLQ语句方面
a. 应尽量避免在where子句中使用!=或<>操作符,否则引擎将放弃索引而进行全表扫描
b. 应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃索引而进行全表扫描
c. 任何地方都不要使用 select * from t ,用具体的字段列表代替“”,不要返回用不到的任何字段
d. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过 1 万行,那么就应该考虑改写。
f. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num/2=100 应改为: select id from t where num=100
2

3.java方面
a. 尽可能的少造对象
b. 合理摆正系统设计的位置。大量数据操作要和少量数据操作分开。orm框架搞不定大量数据操作
c. 使用JDBC连接数据库操作数据库
d. 控制好内存,让数据流起来,而不是全部读取到内存在处理
e. 合理利用内存,有的数据要缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值