Oracle存储过程的编写经验总结

Java中通过jdbc调用oracle存储过程 Java调用Oracle存储过程步骤主要分为三类: (1)编写Oracle存储过程 (2)编写数据库获取连接工具类 (3)编写简单应用调用存储过程 1、Oracle中的存储过程程序 1.在Oracle SQL Developer中创建存储过程 在scott数据库用户中新建一个存储过程(查询某个员工姓名 月薪和职位): create or replace procedure query... 阅读详情

1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databsevv.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。
2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。
3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:

a) SQL的使用规范:

i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。

ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。

iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

vii. 尽量使用“>=”,不要使用“>”。 viii. 注意一些or子句和union子句之间的替换

ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。

x. 注意Oracle存储过程中参数和数据类型的关系。

xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。

b) 索引的使用规范:

i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。

ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引

iii. 避免对大表查询时进行table scan,必要时考虑新建索引。

iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

v. 要注意索引的维护,周期性重建索引,重新编译Oracle存储过程。

c) tempdb的使用规范:

i. 尽量避免使用distinct、order by、group by、having、join、***pute,因为这些语句会加重tempdb的负担。

ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。

iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。

iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。

v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。

vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。

d) 合理的算法使用:

根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。具体可用ASE调优命令:set statistics io on, set statistics time on , set showplan on 等。

Oracle中Oracle存储过程和Sql语句的优化重点2008-07-29 09:14 | 末日风情

1.全表扫描和索引扫描

大数据量表尽量要避免全表扫描,全部扫描会按顺序每条记录扫描,对于>100万数据表影响很大。


Oracle中通过RowID访问数据是最快的方式


对字段进行函数转换,或者前模糊查询都会导致无法应用索引而进行全表扫描


对Oracle共享池和缓冲区中的Sql必须要大小写都完全用上才能够匹配上


2.顺序问题

Oracle按照从右到左的顺序对数据表进行解析。因此From最后面的表为基础表,一般要选择记录数最少的表作为基础表。


对于Where条件的顺序,过滤到最大查询记录数量的条件必须写在Where条件的结尾处。


Where条件中涉及到使用复杂函数判定的必须注意要写到Where条件的最前面


3.索引方面

记录数少的表保留有主键索引就可以了,不要再去建其它索引,全表扫描也很快


索引最好单独建立表空间,必要时候对索引进行重建


必要时候可以使用函数索引,但不推荐使用


Oracle中的视图也可以增加索引,但一般不推荐使用


*Sql语句中大量使用函数时候会导致很多索引无法使用上,要针对具体问题分析


4.其它

避免使用Select *,因为系统需要去帮你将*转换为所有的列名,这个需要额外去查询数据字典。


Count(1)和Count(*)差别不大。


多使用Decode函数来作简单的代码和名称间的转换,以减少表关联


使用Truncate替代delete来删除记录,但Truncate数据不记录日志,无法进行回滚


对于复杂的Oracle存储过程可以多次提交的数据的要多分多次Commit,否则长事务对系统性能影响很大


Distinct和Having子句都是耗时操作,应该尽可能少使用


在不需要考虑重复记录合并时候用Union All来代替Union


使用显性游标而不使用隐性游标,特别是大数据量情况下隐性游标对性能影响很大


是否使用函数的问题


用直接的表关联来代替Exist.用Exist或Not Exists来代理In。In进行子查询效率很差。


5.SQL语句分析

通过SQLPLUS中的SET TRACE 功能对Sql语句的性能进行分析


通过Toad或PL/SQL Developer对语句的性能进行和索引的使用情况进行分析


对Oracle缺省的优化不满意可以强制使用Hint,但一般不推荐使用


对Flag等只存储是或否信息的字段,一般不推荐建立索引。必要可以采用位图索引


*存在递归查询情况如果关联Table太多对性能会造成较大影响,往往推荐采用临时表转为分步骤操作提高性能


*尽量使用表关联查询而不使用函数,但涉及类似于代码表要重复关联多次取数据问题时候又适合使用函数


上述的相关内容就是对Oracle存储过程编写经验和优化措施的描述,希望会给你带来一些帮助在此方面。

[置顶] Oracle PL/SQL中编写空操作的存储过程 原创文章,转载请注明作者:黄文海 来源:http://viscent.iteye.com,同步发布在:http://blog.viscenthuang.info/2012/10/oracle-plsql中编写空操作的存储过程/   尽管我们编写存储过程(Stored Procedure)是希望其完成一些特定的功能。但是在某些情况下,现有的存储功能所实现的功能可能已经不再需要或者我们打算采用其它方式 阅读详情

相关推荐

使用Oracle作为中间件编写存储过程,实现Sql Server到MySQL的数据同步

通过使用Oracle作为中间容器编写存储过程,将Sql Server的数据实时同步到MySql,不直接在SqlServer中进行操作。 公司最近的项目要部署上线了,然后需要将甲方公司的ERP,OA,MES,PLM等系统的数据同步到我们的系统之中来,但是因为各个系统的厂家不一样有用友的ERA,致远的OA等等所以数据库有多种,Sql Server,Oracle,Mysql都有,而我们的系统使用的是My...

qq_44199087的博客 1955

Oracle存储过程编写经验和优化措施

转自:http://www.blogjava.net/pure/archive/2008/07/29/218254.html 1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 ...

czjxdm 189

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 396

Oracle 存储过程详细介绍及如何使用

在上述示例中,存储过程 your_stored_procedure 没有输入参数,也没有输出参数。您可以在存储过程的逻辑部分编写您需要的操作,例如查询数据并进行处理,输出消息等。请根据您的实际需求修改示例代码,并将适当的逻辑放在存储过程中。执行该存储过程时,可以使用 EXEC your_stored_procedure;或者 CALL your_stored_procedure;来调用它。在执行过程中,存储过程中的逻辑将被执行,并将结果输出到 DBMS_OUTPUT,您可以通过适当的方式查看输出结果。

小白记录 1万+

SAP 银企直连实战:从零构建 DMEEX 格式树的配置与调试指南

本文详细介绍了SAP银企直连中DMEEX格式树的配置与调试方法,涵盖从基础认知到实战技巧的全流程。通过具体案例解析,帮助财务顾问快速掌握建设银行付款报文的格式树搭建、字段映射及调试优化,提升企业支付效率与准确性。

weixin_42526015的博客 566

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

Oracle存储过程

使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%TYPE是非常好的编程风格,因为引用型变量更加灵活。

猪之仆的博客 6541

Figma到Axure一键转换:Axhub Extension保姆级教程(含常见问题解决)

本文提供Axhub Extension的保姆级教程,详细讲解如何将Figma设计稿一键转换为Axure高保真交互原型。教程涵盖环境准备、核心转换四步走流程,并重点解决JSON导入失败、样式错乱、复杂组件转换等常见问题,旨在打通Figma与Axure之间的数据孤岛,大幅提升设计师和产品经理的原型制作效率。

night的博客 1575

oracle数据库开发规范

编程规范 1:所有数据库关键字和保留字都大写;字段、变量的大小写 2:程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。 必须使用空格,不允许使用【tab】键。 3:当同一条语句暂用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。 4:不允许多...

chongyi1654的博客 1467

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2740

Android Shadow插件化框架分析与集成(一)

到此为止,本篇文章先介绍到这里,本篇文章主要介绍了:从源码的角度去集成shadow框架,从下载源码开始,到集成到自己的项目中,其中插件项目我是新建的demo应用,宿主应用是之前搭的一个MVP框架。文章中一步一步详细的介绍了宿主该如何集成,并提供了源码;介绍了插件该如何集成,同时也提供了源码。文章中还介绍了gradle的版本与AGP版本使用不当造成的问题,以及shadow源码的gradle版本与APG版本的配置,及和宿主插件应用gradle版本与AGP版本的关系。

superzhang6666的博客 1234

Oracle存储过程基本语法浅谈

-SYS_REFCURSOR 中可使用三个状态属性: ---%NOTFOUND( 未找到记录信息) %FOUND( 找到记录信息) ---%ROWCOUNT( 然后当前游标所指向的行位置)-- 此处声明了一个TestArray 的类型数据,其实其为一张存储Info 数据类型的Table 而已,及TestArray 就是一张表,有两个字段,一个是name ,一个是y。首先明确一个概念:Oracle 中本是没有数组的概念的,数组其实就是一张表(Table), 每个数组元素就是表中的一个记录。

xiaoweids的博客 1283

小红书图文笔记图像批量爬取:Python爬虫实战与反反爬策略全解析

在当今社交媒体盛行的时代,小红书作为中国领先的生活方式分享平台,积累了海量的优质图文内容。对于数据分析师、市场研究人员或内容创作者来说,能够高效获取这些数据具有重要意义。本文将详细介绍如何使用Python构建一个高效、稳定的小红书图文笔记图像批量爬取工具,涵盖最新技术栈和反反爬策略。本文详细介绍了如何使用Python构建一个高效、稳定的小红书图文笔记图像批量爬取系统。通过结合Playwright、aiohttp等现代工具,实现了从列表页采集到图片下载的完整流程。

2201_76125261的博客 2362

[转载]Oracle存储过程的编写经验总结

原文地址:Oracle存储过程的编写经验总结作者:DianZhang 以下的文章是对Oracle存储过程的编写经验与优化措施的具体操作,如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。望你浏览完以下的内容会有所收获。 1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databsevv.dbo.table_...

weixin_30316097的博客 91

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

我只定义了三层数据,就只演示展开了三层,还可以多层,自己设置即可。

蜗牛~~ 2602

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ORACLE存储过程

目录一、存储过程的创建二、存储过程语法说明1.存储过程的基本结构2.变量的声明和赋值三、流程控制语句四、循环控制语句 本文是基于oracle编写的存储过程,以下所说的存储过程均为oracle中的存储过程,以及下面所说的存过都是存储过程的简称 一、存储过程的创建 创建存储过程的方式两种,一种是基于PLSQL创建,一种是ORACLE语法创建 PLSQL创建步骤: 1.连接plsql 2、找到左边对象下的procedures,点击右键 3、点击新建进入到创建存过页面 4、填写存储过程名称以及输入参数和输出

weixin_44740485的博客 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一个 Oracle 存储过程编写的入门级例子

  一个 Oracle 存储过程编写的入门级例子    存储过程是在面试中常被问到的程序员必备技能之一。很多朋友被问到时唯唯诺诺,吞吞吐吐,明显自信不足。其实存储过程无外乎就是特定的功能,在特定的层次实现。这些朋友可能会触发器,但是不怎么用存储过程而已。久而久之,谈虎色变。为此作者写了一个 Oracle 存储过程的入门级例子,用实例来帮这些朋友对存储过程 say "Hell

Defonds 的专栏 3万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

oracle如何编写存储过程,如何开发ORACLE存储过程

我的上一个银行项目中,我接到编写ORACLE存储过程的任务,我是程序员,脑袋里只有一些如何使用CALLABLE接口调用存储过程的经验,一时不知如何下手,我查阅了一些资料,通过实践发现编写ORACLE存储过程是非常不容易的工作,即使上路以后,调试和验证非常麻烦。简单地讲,Oracle存储过程就是存储在Oracle数据库中的一个程序。一. 概述Oracle存储过程开发的要点是:• 使用Notepad文...

weixin_40006779的博客 1178

存储过程的编写

参考视频:https://www.imooc.com/video/7256 常见语法参考:https://www.cnblogs.com/chinafine/articles/1776085.html oracle存储过程的编写,在plsql基础上编写。 存储过程是没有返回值的,但是可以通过out参数返回值。 1.存储过程的调用(2中方式)     在sql窗口执行一下:     a....

我想静静 4万+

oracle如何写储存过程,编写Oracle存储过程的介绍

如果你在上一个银行的目中,当我们接到编写关于Oracle存储过程的任务时,我们会涉及到某些使用CALLABLE的接口调用存储过程的经验,一时不知如何下手,我查阅了一些资料,通过实践发现编写Oracle存储过程是非常不容易的工作。即使上路以后,调试和验证非常麻烦。简单地讲,Oracle存储过程就是存储在Oracle数据库中的一个程序。一. 概述Oracle存储过程开发的要点是:* 使用Notepad...

weixin_35147832的博客 2015

用Java编写Oracle存储过程

Oracle里可以使用多种语言来编写存储过程,比如Pro*C/C++,PL/SQL,COBOL,在Oracle8i开始支持用Java编写存储过程。如果非要写存储过程的话,做为以Java谋生的我,首选用Java编写,用PL/SQL需要记忆很多的语法(Pascal类的语法)和函数,远不如使用Java/JDBC这么轻车熟路。而且,DB2等数据库都支持Java存储过程,所以不比为每一种数据学习一种编写

Bob@优快云 853

在.NET中调用Oracle9i存储过程经验总结

 在.NET中调用Oracle9i存储过程经验总结 在.NET中调用Oracle9i存储过程可以用多个数据提供者,比如OralceClient,OleDb。本文将用OralceClient为例。.NET语言用C#。 一、调用一个带输入、输出参数的存储过程首先,在Oralce中创建存储过程如下:create or replace procedure GetRecords(

异道的专栏 1万+

使用Java编写oracle存储过程

使用Java编写oracle存储过程bromon原创 请尊重版权       通常我们都使用ps/sql为oracle编写存储过程,从oracle 8开始我们可以有另一种选择:Java。8.0开始,oracle自带一个jvm,内置对java的支持,任何java能做的事情你都可以放到oracle里面来做,你甚至可以在里面操作db2。这让oracle具备了极其巨大的扩展能力,只

Sometimes Java 2142
上一篇: 使用ThreadLocal模式管理Hibernate的Session
下一篇: 探讨Java的类加载机制
accpsz
博客等级 码龄21年 38粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值