oracle函数

如何写出高性能的sql语句?

痴心易碎 提交于 2020-04-03 10:30:03
如何写出高性能的sql语句? (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3) SELECT子句中避免使用 ‘ * ‘: ORACLE 在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 (4) 减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6) 使用DECODE函数来减少处理时间:

Oracle date和timestamp区别

不羁的心 提交于 2020-04-02 15:14:43
<转自> http://blog.csdn.net/huaguoming/article/details/8693679 在今天的工作中,学到了以下几个知识点: 一、date和timestamp 的区别 date类型是Oracle常用的日期型变量,他的时间间隔是秒。两个日期型相减得到是两个时间的间隔,注意单位是“天”。例如:查看一下当前距离伦敦奥运会开幕还有多长时间: select to_date('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual 结果是:92.2472685185185天,然后你根据相应的时间换算你想要的间隔就行!这个结果可能对程序员有用,对于想直接看到结果的人,这个数字还不是很直观,所以,就引出了timestamp类型 timestamp是DATE类型的扩展,可以精确到小数秒( fractional_seconds_precision),可以是 0 to9,缺省是6。两个timestamp相减的话,不能直接的得到天数书,而是得到,多少天,多少小时,多少秒等,例如:同样查看一下当前距离伦敦奥运会开幕还有多长时间: select to_timestamp('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual

ORCALE 相关操作

◇◆丶佛笑我妖孽 提交于 2020-04-02 15:12:24
卸载: 1,关闭oracle所有的服务。 打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 删除该路径下的所有以oracle开始的服务名称 2,打开注册表 路径: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 删除该oracle目录 3,删除注册表中关于oracle的事件日志注册项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\ 删除以oracle开头的所有内容 4,删除环境变量path中关于oracle的内容。 重新启动操作系统 删除Oracle_Home下的所有数据 删除C:\Program Files下oracle目录 5,删除开始菜单下oracle项 C:\Documents and Settings\All Users\「开始」菜单\程序\Oracle - Ora92 --Orcale启动与关闭 ------------------------------------------------------ --启动oracle数据库服务 net start oracleserviceora92 --启动oracle监听服务 lsnrctl start

Oracle Group总结

孤街醉人 提交于 2020-04-01 23:00:15
许多人在刚开始使用GROUP BY语句的时候经常都会碰到一些错误。刚刚在网上看到一篇关于GROUP BY的文章,觉得不错,转过来学习学习,下面再加上一些自己的看法。 ================================================================================== Oracle Group By 用法之 —— Having 客户需求分析:   笔者最近接到一家客户的一个需求。他们部署了一个ERP系统,现在采用的就是Oracle数据库。现在由于企业统计分析的需要,要实现如下的需求。   1、按月份来统计2009年第一季度每个供应商的采购金额。也就是说,在报表中要能够显示出2009年1月份、2月份、3月份供应商的采购金额合计,不需要明细。   2、显示的结果按年度、月份、供应商名字进行排序。 PL/SQL语句解析:   select extract(YEAR FROM t.dateordered) AS 年度,extract(MONTH FROM t.dateordered) as 月份,   p.name as 供应商名字,sum(t.linenetamt) 合计   from c_orderline2 t   left join c_bpartner p on p.c_bpartner_id=t.c_bpartner

Oracle学习时关于SQL语言的总结

情到浓时终转凉″ 提交于 2020-03-31 04:10:21
1、查询dept表的结构 在命令窗口输入:desc dept; 2、检索dept表中的所有列信息 select * from dept 3、检索emp表中的员工姓名、月收入及部门编号 select ename "员工姓名",sal "月收入",empno "部门编号" from emp 4、检索emp表中员工姓名、及雇佣时间 日期数据的默认显示格式为“DD-MM-YY",如果希望使用其他显示格式(YYYY-MM-DD),那么必须使用TO_CHAR函数进行转换。 select ename "员工姓名", hiredate "雇用时间1",to_char(hiredate,'YYYY-MM-DD') "雇用时间2" from emp 注意:第一个时间是日期类型的,在Oracle的查询界面它的旁边带有一个日历。第二个时间是字符型的。不要将YYYY-MM-DD使用双引号 5、使用distinct去掉重复行。 检索emp表中的部门编号及工种,并去掉重复行。 select distinct deptno "部门编号",job "工种" from emp order by deptno 6、使用表达式来显示列 检索emp表中的员工姓名及全年的月收入 select ename "员工姓名", (sal+nvl(comm,0))*12 "全年收入" from emp 注意:防止提成comm为空的操作

Oracle中字符串连接的实现方法

邮差的信 提交于 2020-03-30 07:23:13
1.和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLServer中的加号“+”一样。 例如: SELECT '工号为'||FNumber||'的员工姓名为'||FName FROM T_Employee WHERE FName IS NOT NULL 2.除了“||”,Oracle还支持使用CONCAT()函数进行字符串拼接,比如执行下面的SQL语句: SELECT CONCAT('工号:',FNumber) FROM T_Employee 如果CONCAT中连接的值不是字符串,Oracle会尝试将其转换为字符串,比如执行下面的SQL语句: SELECT CONCAT('年龄:',FAge) FROM T_Employee 与MYSQL的CONCAT()函数不同,Oracle的CONCAT()函数只支持两个参数,不支持两个以上字符串的拼接,比如下面的SQL语句在Oracle中是错误的: SELECT CONCAT('工号为',FNumber,'的员工姓名为',FName) FROM T_Employee WHERE FName IS NOT NULL 运行以后Oracle会报出下面的错误信息: 参数个数无效 3.如果要进行多个字符串的拼接的话,可以使用多个CONCAT()函数嵌套使用,上面的SQL可以如下改写: SELECT

跟随我在oracle学习php(19)

孤街浪徒 提交于 2020-03-29 17:29:56
Order by子句 形式: order by 排序字段1 [排序方式], 排序字段2 [排序方式], ..... 说明: 对前面取得的数据(含 from子句,where子句,group子句,having子句的所有结果)来指定按某个字段的大小进行排列(排序),排序只有2种方式: 正序: ASC(默认值),可以省略 倒序: DESC 如果指定多个字段排序(虽然不常见),则其含义是,在前一个字段排序中相同的那些数据里,再按后一字段的大小进行指定的排序。 limit子句 形式: limit [起始行号start], 要取出的行数num 说明: 表示将前面取得的数据并前面排好之后(如果有),对之指定取得 “ 局部连续的若干条 ” 数据。 起始行号start:第一行的行号为0, 可以省略,则为默认行号(0)。 要取得的行数:如果结果集中从指定的行号开始到最后没有这么多行,则就只取到最后。 此子句非常有用 —— 主要用于网页上最常见的一个需求(现象):分页。 分页原理: 分页的前提:人为指定每页显示的条数, $pageSize = 3; 显示(取得)第 1页数据:select * from 表名 limit 0, $pageSize; 显示(取得)第 2页数据:select * from 表名 limit 3, $pageSize; 显示(取得)第 3页数据:select * from 表名

Oracle中查询当前时间、时间格式化方法

允我心安 提交于 2020-03-28 18:13:40
Oracle中如何获取系统当前时间 原文链接:https://blog.csdn.net/qq_26483671/article/details/79762338 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ORACLE里获取一个时间的年、季、月、周、日的函数 select to_char(sysdate, 'yyyy' ) from dual; --年 select to_char(sysdate, 'MM' ) from dual; --月 select to_char(sysdate, 'dd' ) from dual; --日 select to_char(sysdate, 'Q') from dual; --季 select to_char(sysdate, 'iw') from dual; --周 //时间格式化方法 to_date('2009-12-25 14:23:31(时间)','yyyy-mm-dd,hh:mi:ss'(格式)) 来源: https://www.cnblogs.com/lwh-12345/p/12588470.html

存储过程和函数 oracle

强颜欢笑 提交于 2020-03-24 18:47:21
3 月,跳不动了?>>> declare begin dbms_output.put_line('Hello World'); end; declare i number := 10; begin if i > 5 then dbms_output.put_line('OK'); end if; end; --loop循环 declare i number := 1; begin loop dbms_output.put_line('OK'); exit when i=10; i:=i+1; end loop; end; --while 循环 declare i number :=1; begin while i<10 loop dbms_output.put_line('我说了算'); i:=i+1; end loop; end; -- 1-100之间所有的偶数 declare i number := 1; begin while i <= 100 loop if mod(i, 2) = 0 then dbms_output.put_line(i); end if; i := i + 1; end loop; end; --智能循环 for循环 declare begin for i in 1 .. 10 loop dbms_output.put_line(i); end

dotnet oracle摘自msdn

纵然是瞬间 提交于 2020-03-23 06:09:14
使用 ADO.NET 访问 Oracle 9i 存储过程 发布日期: 5/28/2004 | 更新日期: 5/28/2004 Bill Hamilton 2004 年 4 月 适用于: Microsoft ADO.NET Microsoft SQL Server Microsoft .NET Oracle 提供程序 Microsoft .NET Framework 1.1 版 摘要:使用 Microsoft .NET 框架 1.1 中的 Microsoft .NET Oracle 提供程序访问 Oracle 存储过程和函数。(24 页打印页) 内容 本页内容 概述 类 执行存储过程 不返回数据的存储过程 结果集与 REF CURSOR 包 使用 DataReader 返回单个值的存储过程 序列 使用 DataAdapter 填充数据集 使用 DataAdapter 更新 Oracle 使用多个结果集 小结 相关书籍 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程(称为 SQL 编程块)和函数(返回单个值的编程块)。 您可以使用以下托管数据提供程序连接到 Oracle 数据库:Microsoft .NET Oracle 提供程序、OLE DB .NET 提供程序、ODBC .NET 数据提供程序以及 Oracle 的 ODP.NET 提供程序。本文使用用于