oracle函数

Oracle大数据常见优化查询

回眸只為那壹抹淺笑 提交于 2020-01-09 23:47:27
(转) Oracle大数据常见优化查询 (1-30): 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 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 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1

Oracle数据库创建存储过程、函数、包(六)

让人想犯罪 __ 提交于 2020-01-09 18:17:57
一、存储过程 存储过程简介 a、 在Oracle中的存储过程又名子程序; b、 命名的PL/SQL块,编译并存储在数据库中; c、 存储过程的各个部分: 声明部分; 可执行部分; 异常处理部分(可选)。 d、存储过程的分类: 过程-执行某些操作; 函数-执行操作并返回值; 存储过程的优点 a、 模块化: 将程序分解为逻辑模块; b、 可重用性: 可以被任意数目的程序调用; c、 可维护性: 简化维护操作; d、 安全性: 通过设置权限,使数据更安全。 创建存储过程的语法 --创建存储过程: create [ or replace ] procedure 存储过程名称 [ ( 参数名称 参数类型 , 参数名称 参数类型 ) ] is | as 局部变量声明区 begin [ 可执行 SQL 语句; ] [ exception 异常处理语句 ] end 过程名称 ; --调用存储过程 begin 过程名称 [ ( 参数名称 参数类型 , 参数名称 参数类型 ) ] ; end ; 例子: in参数存储过程: --3. 创建一个带参数的存储过程,根据制定的参数删除一个员工。 --创建存储过程: create or replace procedure emp2 ( theEmpNo emp . empNo % type ) as begin delete from emp where

SQL优化34条

早过忘川 提交于 2020-01-09 04:51:57
我们要做到不但会写SQL,还要做到写出性能优良的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

SQL优化心得

青春壹個敷衍的年華 提交于 2020-01-09 04:45:42
我们不但会写SQL,还要做到写出性能优良的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参数,

oracle数据库中的trim不起作用@lianghuan

纵然是瞬间 提交于 2020-01-08 13:44:05
在项目中使用datastage软件将sqlserver数据库的数据导入到oracle中的时候,出现了一些空格,然而使用trim相对应的字段发现没有作用,空格还存在,并没有去掉。 使用length(...)和lengthb(...)查看字符长度以及一共多少的字节数,发现空格对应的字节数不对。 一顿搜索后发现可以使用oracle的内置函数to_single_byte(...)来先将非法的空格进行转换成正常的可以trim的空格。 来源: https://www.cnblogs.com/lianghuan/p/12165981.html

oracle表中列的类型。number和integer区别(转)

做~自己de王妃 提交于 2020-01-08 13:37:57
数据库中创建表,常见类型总结: 见一个大神总结的很全: 一、数据类型 1.char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节) 2.varchar2(n) n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。 如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度, 如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。 可做索引的最大长度3209。 3.number(m,n) m=1 to 38n=-84 to 127 可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。 如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。 如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。 如:number(3,0),输入575.316,真正保存的数据是575。 4.date 无 从公元前4712年1月1日到公元4712年12月31日的所有合法日期, Oracle

CEIL和FLOOR函数查询(Oracle,MSSQL)

不问归期 提交于 2020-01-08 13:09:43
CEIL(n)函数:取大于等于数值n的最小整数 --在Oracle 9i中 SELECT mgr,mgr/100,CEIL(mgr/100) FROM scott.emp; --结果: MGR MGR/100 CEIL(MGR/100) ---------- ---------- ------------- 7902 79.02 80 7698 76.98 77 7698 76.98 77 7839 78.39 79 7698 76.98 77 7839 78.39 79 7839 78.39 79 7566 75.66 76 7698 76.98 77 7788 77.88 78 MGR MGR/100 CEIL(MGR/100) ---------- ---------- ------------- 7698 76.98 77 7566 75.66 76 7782 77.82 78 已选择14行。 --在MSSQL 2005中 CREATE TABLE #Test(X numeric(20,1)) INSERT INTO #Test SELECT 61.3 UNION ALL SELECT 132.2 UNION ALL SELECT 22.7 UNION ALL SELECT 11.8 SELECT ceiling(X) FROM #Test -

oracle-函数

不打扰是莪最后的温柔 提交于 2020-01-08 09:06:22
函数的语法 create or replace function 函数名(参数1 模式 参数类型) return 返回值类型 as  变量1 变量类型;  变量2 变量类型; begin  函数体; end 函数名; 模式的分类 in: 为只读模式, 在函数中, 参数的值只能被引用, 不能被改变; out: 为只写模式, 只能被赋值, 不能被引用; in out: 可读可写. 函数的删除 drop function testfunction //testfunction为函数名称 函数的创建 要求:调用函数 传入两个参数 输出他们的和 1. 首先在plsql软件的左侧找到Functions文件夹,在文件夹上右键点击新建,弹出右侧的框体。 2. 在弹出的框体中输入名称(name),参数(parameters)和返回值(return type),在后面可以修改,所以参数和返回值类型可以暂时省略。 注意: 1. function:函数的标志。 2. test1:函数的名称。 3. num1,num2:函数的参数。 4. return number:返回值类型为number。 5. num3 number:定义一个number类型的变量,名称为num3。 6. return(num3)返回 1 create or replace function test1(num1 number

【Oracle】【34】ceil和floor函数

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-08 05:06:42
前言: ceil(n) :取大于等于数值n的最小整数; floor(n):取小于等于数值n的最大整数; 正文: -- 10 select ceil(9.3) from dual; -- 9 select floor(9.3) from dual; -- -9 select ceil(-9.3) from dual; -- -10 select floor(-9.3) from dual; 参考博客: Oracle中trunc函数、round 函数、ceil函数和floor函数的使用 - 舒山 - 博客园 https://www.cnblogs.com/yw0219/p/5789664.html 来源: https://www.cnblogs.com/huashengweilong/p/11355302.html

Oracle PL/SQL程序包练习

為{幸葍}努か 提交于 2020-01-07 20:52:17
1.在一个包中定义两个重载的方法,两个方法作用都是求一个数到另一个数的和并将和返回,方法申明如下: function getSum(endNumber int) return int; 没有指定开始值,直接求1到endNumber的和并返回 function getSum(endNumber int,beginNumber int) return int; 求beginNumber到endNumber的和并返回 1.创建包头 create package pack_sum as function getSum(endNumber int) return int; function getSum1(endNumber int, beginNumber int) return int; end pack_sum; 2.创建包的主体 create or replace package body pack_sum as function getSum(endNumber int) return int as sum_count int:=0; begin for var in 1..endNumber loop sum_count:=sum_count+var; end loop; return sum_count; end getSum; function getSum1