oracle函数

SQL 优化原则

流过昼夜 提交于 2020-01-26 01:55:44
   一、问题的提出  在应用系统开发初期,由于开发数据库数据比较少,对于查询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作索引

oracle 存储过程 存储函数

断了今生、忘了曾经 提交于 2020-01-25 10:44:54
一: 定义:指存储在数据库中供所有用户程序调用的子程序,叫存储过程、存储函数。 相同点:完成特定功能的程序 不同点:是否用return语句返回值,存储过程无return返回值,存储函数有return返回值。 二:创建和调用存储过程 创建:create or replace procedure 命令 语法:create or replace procedure 过程名(参数列表) as PLSQL子程序体 调用:两种方式 1.exec 过程名(参数列表); 2.begin 过程名(参数列表); 过程名(参数列表); end; / 例子:1 无参存储过程,打印hellow world create or replace procedure sayhellowworld as begain dbms_output.put_line("hellowworld"); end; / commit; 调用: 1.exec sayhellowworld(); 2.begin sayhellowworld(); sayhellowworld(); end; / 2 有参in存储过程:给某个员工加100工资,应打印出涨前涨后薪水。 create or replace procedure raisesalary(eno in number) as --定义一个变量psal保存涨前薪水

PostgreSQL create type(兼容oracle)

南楼画角 提交于 2020-01-24 21:03:00
pg中支持创建自定义类型create type,虽然和oracle中的自定义类型语法上有所差异,但是pg中的功能可以完全覆盖oracle中的自定义类型。 oracle create type: https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8001.htm#i2126568 –创建自定义类型: SQL > create type type1 as object ( a1 number , a2 number ) ; 2 / Type created . –使用自定义类型 SQL > CREATE TABLE tab1 ( b1 NUMBER , b2 type1 ) ; Table created . SQL > INSERT INTO tab1 VALUES ( 1 , type1 ( 2 , 3 ) ) ; 1 row created . –创建自定义类型的方法 通过member function指定方法。 SQL > CREATE TYPE type2 AS OBJECT ( a1 NUMBER , MEMBER FUNCTION get_square RETURN NUMBER ) ; 2 3 / Type created . 通过创建类型体,定义方法的实体。 SQL > CREATE

oracle中处理日期大全

限于喜欢 提交于 2020-01-24 08:15:14
oracle自带的函数很多很好用。   24小时格式下时间范围为: 0:00:00 - 23:59:59....   12小时格式下时间范围为: 1:00:00 - 12:59:59 ....   1.日期和字符转换函数用法(to_date,to_char)   2.select to_char( to_date(222,'J'),'Jsp') from dual   显示Two Hundred Twenty-Two   3.求某天是星期几 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 星期一 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; monday   设置日期语言 ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';   也可以这样 TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')   4.两个日期间的天数 select floor(sysdate - to_date('20020405','yyyymmdd'

【Oracle】OVER(PARTITION BY)函数用法

依然范特西╮ 提交于 2020-01-23 02:39:02
OVER(PARTITION BY)函数介绍 开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下: 1:over后的写法: over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数 over(partition by deptno)按照部门分区 over(partition by deptno order by salary) 2: 开窗的窗口范围 : over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。 举例: -- sum(s)over(order by s range between 2 preceding and 2 following) 表示加2或2的范围内的求和 select name,class,s, sum(s)over(order by s range between 2 preceding and 2 following) mm from t2 adf 3 45 45 -

Oracle中chr()和ascii()函数(附:常用字符与ascii对照表)

荒凉一梦 提交于 2020-01-23 00:32:23
Oracle中chr()和ascii()函数(附:常用字符与ascii对照表) 关键字:chr() chr()函数作用 :“特殊”字符特殊处理 在PLSql中可查询相对应的字码与特殊符 chr()函数示例: select chr(38) from dual; ascii()函数示例: select ascii('&') from dual; 比如“&”到底为什么在Oracle中成了特殊字符呢?经过查找,终于揭晓了答案:原来&这个字符在oracle的sql语句或存储过程中用来指定其后跟的是执行时要你输入的变量。如:select * from &AAA;则执行此语句时,系统会提示你给赋值。或者比如:insert into test(col1,col2,col3,TYPE) values(0,0,0,'&type'),在PL/SQL Developer的SQL Window 中执行这条语句时,会弹出一个Variables提示框,要求你输入变量'type'值。而如果执行:insert into test(col1,col2,col3,TYPE) values(0,0,0,chr(38)||'type') ,它就会乖乖的向表中插入这条数据。这下,所有疑虑就都云开雾散廖!~ 对特殊字符单独进行处理(加'或者chr(ascii))后,再用||连接其他字符。 下面是常见字符与ascii对照表

ORACLE 内置函数之GREATEST和LEAST

守給你的承諾、 提交于 2020-01-22 22:51:12
Oracle比较一列的最大值或者最小值,我们会不假思索地用MAX和MIN函数,但是对于比较一行的最大值或最小值呢?是不是日常用的少,很多人都不知道有ORACLE也有内置函数实现这个功能:COALESCE / GREATEST / LEAST. 1. COALESCE 返回该表达式列表的第一个非空value。 格式: COALESCE( value1, value2, value3, … ) 含义: 返回value列表第一个非空的值。 value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。 EXAMPLE: select coalesce (1, null, 2 ) from dual ; — 返回1 select coalesce ( null, 2, 1 ) from dual ; — 返回2 select coalesce (t.empno, t.mgr ) from scott.emp t ; — 效果类似 NVL( t.empno, t.mgr ) 2. GREATEST 返回值列表中最大值 格式: GREATEST( value1, value2, value3, … ) 含义: 返回value列表最大的值。 value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。 当value值列表中有一个为NULL,则返回NULL值。

Oracle+SQL优化第二弹

◇◆丶佛笑我妖孽 提交于 2020-01-22 20:59:54
SQL 语句性能优化(未完待续) 要使 Oracle SQL 语句具有最优的性能,需要从多方面进行优化,下面分别进行说明。 1 选用合适的 ORACLE 优化器 ORACLE 的优化器共有 3 种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对 init.ora 文件中 OPTIMIZER_MODE 参数的各种声明,如 RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在 SQL 句级或是会话(session)级对 其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行 analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过 analyze 命令有关. 如果 table 已经被 analyze 过, 优化器模式将自动成为 CBO , 反之,数据库将采用 RULE 形式的优化器. 在缺省情况下,ORACLE 采用 CHOOSE 优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用 CHOOSE 优化器,而直接采用基于规则或者基于成本的优化器.

Oracle用户常用数据字典

梦想与她 提交于 2020-01-22 18:37:46
下面按类别列出一些Oracle用户常用数据字典的查询使用方法。 一、用户 查看当前用户的缺省表空间 SQL>SELECT username,default_tablespace FROM user_users; 查看当前用户的角色 SQL>SELECT * FROM user_role_privs; 查看当前用户的系统权限和表级权限 SQL>SELECT * FROM user_sys_privs; SQL>SELECT * FROM user_tab_privs; 二、表 查看用户下所有的表 SQL>SELECT* FROM user_tables; 查看名称包含log字符的表 SQL>SELECT object_name,object_id FROM user_objects WHERE INSTR(object_name,'LOG')>0; 查看某表的创建时间 SQL>SELECT object_name,created FROM user_objects WHERE object_name=UPPER('&table_name'); 查看某表的大小 SQL>SELECT SUM(bytes)/(1024*1024) AS size(M) FROM user_segments WHERE segment_name=UPPER('&table_name');

Oracle中存储过程的使用

我怕爱的太早我们不能终老 提交于 2020-01-22 07:57:07
一、什么是存储过程: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。其优点如下: 1. 存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。 2. 存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。 3. 存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。 4. 像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值