工作备忘一: Oracle相关

1.删除重复项, 只保留第一条
delete table t1 where t1.ID not in ( select min(t2.ID) from table t2 group by t2.ColName)

 

2.查找重复记录
select t1.ID, count(*) from table  group by t1.ID having count(*) > 1 order by count(*) desc

 

3.导入数据时, 如果目标表存在主键且主键在源表中没有对应的字段时, 使用触发器+序列

create or replace trigger res_circuit_uuid_insert
  before insert  on  table
  for each row
begin
     select SEQ_TABLE_ID.Nextval into :new.ID from dual;
end ;

 

4.导入数据(目标表已存在, 目标表没有主键或主键约束禁用)

insert into table2 t2
          (

           t2.col1, t2.col2, ...
          )
select distinct
           t1.col1, t1.col1, ...
from table1 t1;

 

5.通过查询直接生成一个新表(结构+数据)

create table new_table
as select * from old_table

nologging

 

6.通过查询直接生成一个新表(复制表结构)

(1).复制所有字段

create table new_table
as select * from old_table
where 1=2;

(2).复制部分字段

create table new_table
as select col1, col2
from old_table
nologging;

 

7.修改表结构

(1). 添加列
alter table tableName
ADD
( col1 col_type,
  col2 date default sysdate
);


(2). 修改列
alter table tableName
MODIFY
(col1 new_col_type, --更改为新类型
 col2 default null
);


(3).删除列
alter table department
DROP
(col1, col2...)
cascade constraints;  --删除相关约束


(4).软删除(标记为 unused 状态);
alter table tableName
set UNUSED
(col1, col2)
cascade constraints;

(5).彻底删除
alter table tableName
drop unused columns;

 

8.删除表

(1).删除所有记录(适用于记录数量小的表)
delete from tableName;

(2).drop table tableName

create table new_table
as select * from old_table;

(3).(适用于大量记录的表)
truncate table tableName;

 

9.表重命名

rename old_tableName
to new_tableName

 

10.添加注释

(1). 给表添加注释
comment on table tableName
is
'这是一个新表...'

(2). 给列添加注释
comment on COLUMN
tableName.columnName is
'这是一个列'

 

11.字典表

<1>.用户和概要文件相关的数据字典视图

(1).dba_users
--DBA视图描述数据库中的所有用户
select * from dba_users db

db.username --用户名
db.user_id --用户ID
db.password --口令(加密)
db.account_status --账户状态:OPNE || EXPIRED || LOCKED
db.expiry_date --终止日期
db.default_tablespace --表空间
db.created --创建日期


(2).all_users
--all视图列出当前用户可以看见的用户,
--但不予描述, 即只列出 UserName, User_ID, Created(date)
select * from all_users

(3).user_users
--仅仅列出当前用户的信息
select * from user_users

(4).dba_profiles
--显示所有的概要文件的资源参数
--pro.profile: 概要文件名称
--pro.resource_name: 资源名称:如 password_grace_time
--pro.resource_type: 资源类型:如:password
--pro.limit: 是否限制
select * from dba_profiles pro

(5).user_password_limits
--通过概要文件为用户设置的口令资源参数视图
--resusece_name: 资源名称:failed_login_attempts
--limit:限制状态
select * from user_password_limits

 

<2>.权限与角色字典视图

(1).dba_col_privs
--DBA视图描述了数据库中的所有列对象的授权
select * from dba_col_privs pri
pri.grantee --用户或角色(因为权限可以直接赋予用户)
pri.owner --所有者
pri.table_name --(列所属表名称)
pri.column_name --列
pri.grantor --
pri.privilege --权限
pri.grantable

(2).user_col_privs
--当前用户的所有列对象的授权

(3).dba_tab_privs
--DBA视图描述了数据库中的所有对象的(非系统的)授权
select * from dba_tab_privs pr
pr.grantee --用户或角色(被授权者)
pr.owner --使用者
pr.table_name --表
pr.grantor --授权者
pr.privilege --权限
pr.grantable --是否table对象


(4).user_tab_privs
--当前用户被授予的所有 对象的(非系统)授权
--对象权限包括:privilege:select, delete, update....
select * from user_tab_privs

(5).user_sys_privs
--当前用户的所有系统权限
select * from user_sys_privs


--系统权限包括:
--: create role,rule, type, user, view, table, cluster, trigger
--: create library, session, synonym, trigger, sequence, procedure.
select * from user_sys_privs  p1 where p1.privilege like 'CREATE%'

(6).dba_sys_privs
--dba的系统权限
select * from dba_sys_privs

(7).user_role_privs
--授予给当前用户的角色
--userName: 用户名
--granted_role: 被授予的角色
--admin_option: 此用户下的用户是否可以被继承此用户的角色

(8).role_sys_privs
--授予给角色的系统权限的信息
--role : name
--privilege: 权限

--amdin_option: 是否可以被继承

(9).role_tab_privs
--授予给角色的对象的(table)权限
--role:Name
--owner: user
--table_name:tableName
--column_name:
--privilege:alter, debuge, insert;;;;;

(10).session_privs
--用户当前启用的权限

(11).session_roles
--用户当前启用的角色

 

<3>.其他字典表

(1). 注释表
user_tab_comments

(2).软删除表
user_unused_col_tabs;

 

 

12.添加约束

(1).Not NULL
Alter table tableName
Modify column Not null;
相当于是更改列定义,故为 Modify

(2).Unique
Alter table tableName
Add Unique(col1, col2);
一个列只能定义一个唯一约束(名称)
       
(3).Check
Alter table tableName Add Constraint Check_Col1
Check(col1 betweetn 12 to 34);
不适当的数据类型上定义约束条件(如字符类型上定义数字范围)会报错

(4).Foreign Key
Alter table tableName Add Constraint new_FK
Foreing Key (col1) References
tableName2 (col2) on
Delete Set NULL;
说明: a: Delete Cascade: 删除子表中所有相关的记录
        b: Delete Set NULL: 将所有相关记录的外键列的值设置为NULL
        c: Delete No Action: 不进行任何操作,关联表没影响
        d: 父表: tableName2;  子表: tableName
        e: 外键不可重复定义(尽管可能名称不同)

 

13.激活,禁用, 验证约束

(1).激活 CHK_SEX 约束
Alter table tableName
Enable constraint to CHK_SEX;

(2).激活 Unique 约束
Alter table tableName
Enable Unique (col1);


(3).禁用约束 CHK_SEX
Alter table tableName
Disable constraint CHK_SEX;


(4).验证约束
Alter Table tableName
Enable Validate constraint CHK_SEX;

(5).非验证约束
Alter table tableName
Enable NoValidate constraint CHK_SEX;

 

14.删除约束

(1).删除名称 Chk_Sex约束
Alter table tableName Drop Contraint Chk_Sex;

(2).删除 Unique 约束
Alter table tableName drop unique (col1);

(3).删除外键 约束
Alter table tableName Drop primary key cascade;
说明: 加入 casecade表示删除主键时同时会删除 子表中的外键约束

(4).删除 Not NULL
Alter Table tableName modify col1 NULL;

 

15. 修改约束名

(1).alter table tableName rename constraint check_sex to chk_sex;

 

16.延迟执行约束

原因:有时必须得延迟某个约束
比如: 如果某个表有外键约束(子表), 当向此表插入一条数据时, 而此记录数据还没有相应的父表中插入;

因为约束是默认是立即执行的, 这时通不过外键约束, 插入到子表中的记录会被回退.
但是如果延迟些外键约束, 把给子表和父表插入记录的过程放在在一个事务中,
用户可以随便颠倒父子表的次序的插入记录
当提交事务时再执行外键约束.

e.g
alter table tableName
modify constraint FK_tableName
Initially Deferred;

SQL>Insert Into tablName (xx, xx) values (xx, xx);

SQL>Insert Into tableName2(xx, xx) values (xx, xx);

SQL>Commit;

OK!

 

17.前 n 行

where rownum <= num

 

18.触发器

create or replace trigger tr_emp_sal_comm
before update of sal, comm
or delete

on emp
for each row
when( old.job='salesman') --指定条件: 此触发器只针对销售部门有效
begin
 case
   when updating ( 'sal') then
     if :NEW.sal < :OLD.sal then
       Raise_application_error(-20001, '销售人员工资只能涨不能降');
     end if;
   when deleting then
      Raise_application_error(-20003, '不能删除emp表的销售人员记录');
 end case;
end;

 

19.过程

(1).定义过程

create or replace procedure query_emp
(v_no emp.impno%TYPE,
 v_name out emp.ename%TYPE,
 v_sal out emp.sal%TYPE
)
IS
e_sal_error exception;
begin
select ename, sal --给变量赋值
into  v_name, v_sal
from emp where empon=v_no;

if v_sal <= 2500 then
DBMS_OUTPUT.PUT_LINE('该员工工资: '|| v_sal);
Raise e_sal_error;  --捕获异常: 如果不符合条件都可以当作异常来对待
end if;

exception --抛出异常
when no_data_found then
 dbms_output.put_line('没有该员工':'||v_no);
when e_sal_error then
dbms_output.put_line('该员工工资高于 2500了');
end query_emp;

 

(2).调用过程

set serveroutput on --开启输出
declare
v_a1 emp.ename%TYPE;
v_a2 emp.sal%TYPE;
BEGIN

--调用存储过程;
-- => 表示按名称 对应关系;注: 后面必须要有分号
query_emp(v_name => v_a1, v_sal => v_a2, v_no => 5678);

if v_a2 > 2500
 dbms_output.put_line('工资高于2500')
end if;
End;

20.函数

(1)创建函数

函数与过程的区别
1.函数必须要有 return;
2.函数更侧重于数据相关;过程更侧重于常用操作相关;

create or replace function get_salary_by_deptno
(v_dept_no in emp_deptno%TYPE, --输入部门号
 v_emp_cnt out number) --输出部门人数

return number
IS

v_sum number(10, 2); --返回指定部门的工资总和

begin
 select sum(sal), count(*) into v_sum, v_emp_cnt from emp
 where deptno=v_dept_no;

 return v_sum;

end get_salary_by_deptno;

(2)调用函数

set serveroutput on
declare
v_a1 emp.deptno%TYPE;
v_a2 number;
v_sum number(10,2);

begin
v_sum := get_salary_by_deptno
(v_emp_cnt => v_a2, v_dept_no => 10);

if v_a2 =0 then --可直接使用 v_a2; 因为它是函数输出的;
  DBMS_OUTPUT.PUT_LINE('该部门无人');
else
  DBMS_OUTPUT.PUT_LINE('该部门工资总合: ' || v_sum || '人数: ' || va2 );
end if;
end;

21. Oracle客户端用户管理文件

(Oracle客户端安装目录)

C:\oracle\ora92\network\ADMIN\tnsnames

 

22.创建序列

create sequence SEQ_TABLE_ID
minvalue 1
maxvalue 999999
start with 10001
increment by 1
cache 20;

 

23.游标应用

create or replace procedure curor_check_wrong_cols is
begin
  EXECUTE IMMEDIATE 'DELETE FROM result_table;
  DECLARE
    S_TABLENAME    VARCHAR(100);
    S_CHECK_VALUES VARCHAR(4000);
    CURSOR C_FOR_TABLE IS
      SELECT TABLE_NAME, NAME FROM table;
  BEGIN
    OPEN C_FOR_TABLE;
    LOOP
      FETCH C_FOR_TABLE
        INTO S_TABLENAME;
      EXIT WHEN C_FOR_TABLE%NOTFOUND;
      S_CHECK_VALUES := 'INSERT INTO table_result (TABLE_NAME, ID, ERROR_ROWS_COUNT)

             (SELECT ''' || S_TABLENAME || ''', ''',  '1001', COUNT(*) FROM ' || S_TABLENAME ||
                        ' WHERE col2 IS NULL)'; --NOT IN ( SELECT table2.col2 FROM table2 GROUP BY col2))';
      EXECUTE IMMEDIATE S_CHECK_VALUES;
    END LOOP;
  S_CHECK_VALUES := 'DELETE FROM table_result WHERE ERROR_ROWS_COUNT < 1 ';
  EXECUTE IMMEDIATE S_CHECK_VALUES;
  END;
end curor_check_wrong_cols;

 

24. 利用 union 结合游标将 表1中的字段1, 字段2插入到 表2字段 1中.
create or replace procedure pro_imp_colName is
begin
  DECLARE
    col1 varchar(1000);
    sqlstr VARCHAR(4000);
    CURSOR C_FOR_TABLE IS
      select distinct col1 from
      (select distinct col1 from tableName union select distinct col2 from tableName
  BEGIN
    OPEN C_FOR_TABLE;
    LOOP
      FETCH C_FOR_TABLE
        INTO col1;
      EXIT WHEN C_FOR_TABLE%NOTFOUND;
      sqlstr := 'INSERT INTO table2(col1,col2) values
                ( ''' || col1|| ''', 0)';
      EXECUTE IMMEDIATE sqlstr;
    END LOOP;
  END;
end pro_imp_colName;

 

25.导入数据时屏蔽重复记录(从table1向table2导入数据)
create or replace trigger table2_col1_insert
  after insert 
  on table1
  for each row
declare
  -- local variables here
  col1Count integer;
begin
            --调用存储过程判断 col1 字段是否有已经存在当前要插入的值.
          col1_is_null(colName1 =>  :NEW.colName1, intcount => col1Count);
          EXECUTE IMMEDIATE sqlstr;
          if( col1Count =0) then
             insert into table2
             (col1, col2, col3)
             values
             (:NEW.col1, :NEW.col2,0);
          end if;
        
end ;

--对应的存储过程
create or replace procedure col1_is_null
(colName1 in varchar, intcount out integer )
as
begin
  select count(*) into intcount from table2 where col1=colName;
end ;

 

26. 创建3种类型的索引

创建索引过程:
1.创建索引时会对全表进行扫描
2.对索引列的数据进行排序  --原理
3.为索引分配存储空间
4.将索引的定义信息保存到数据字典中.

创建:
<1>. 创建标准(B树)索引:
条件: 如果在 where 条件子句中要经常引用 某列或某几列, 就应该基于这些列创建B树索引.
1.创建单列索引
create INDEX idx_table_col on table(colName)
PCTFREE 30 
TABLESPACE tablespace_Index;

说明: pctfree 指定将来 insert 操作预留的空间.
因为插入新记录总会创引入新索引值进来.因此预留空间要求较大.

2.创建多列索引
create INDEX idx_table_col1_col2 on table(col1, col2)
pctfree 30
tablespace tablespace_index;

 

<2>.创建位图索引
条件: 某列上记录值的基数很小, 只是有限的几个固定值,如性别,婚姻状态等如果需要建立索引,
就应该建立位图索引.
1.单列位图索引
create bitmap index bmidx_table_col on table(colName);


<3>.创建函数索引.
条件: 当 where 子句中使用了函数和表达式时, 为这些函数和表达式建立函数索引后,
select 的速度会提高.
1. 创建函数索引
create Index funidx_col on table(col1+col2+col3*0.5)

查询下列语句时速度会加快:
select * from table where (col1+col2+col3*0.5) < 500;

2.创建函数索引2
create Index funidx_table_col on table Substr(col1, 1, 2)
compute statistics;

查询col1列的头两位时速度会明显加快
select * from table where Substr(col1, 1, 2) in ('12', '34');

 

27.更改,重命名,合并, 重建

(1).更改:
Alter Index indexName **;

(2).重命名:
Alter Index indexName RENAME TO indexName2;

(3).合并索引: (清除更新产生的磁片)
Alter Index indexName COALESCE;

(4).重建索引:(重新建立一个索引, 删除还来的索引, 但是各种参数不变);
Alter Index indexName REBUILD
TABLESPACE ANOTHER;

 

28.监视索引

(1).查询 V$object_usage, 了解索引的被监视情况
select index_name, monitoring, used, start_monitoring, end_monitoring
from V$OBJECT_USAGE;

结果:
未选定行
说明没有任何索引被监视.

(2).修改索引使之被监视.
Alter Index indexName MONITORING USAGE;

(3).再查询被监视情况:
结果:
indexName, yes, no, timeNow;

(4).执行查询后(利用索引)
再查询结果:
indexName, yes, yes, timeNow;
可见, usered=yes; 表示从开始监视以来索引已经被使用过了.

 

29.索引的空间控制

(1).分配索引空间
Alter index indexName ALLOCATE EXTENT(SIZE 100K);

(2).释放多余空间
Alter INDEX indexName DEALLOCATE UNUSED;

 

30.查看与删除索引

(1).查看

select index_name, index_type, tablespace_name, uniquesness, logging
from user_indexes
where table_name='tableName';

--DBA_INDEXES;  --所有索引
--ALL_INDEXES;
--USER_INDEXES;
--DBA_IND_COLUMNS; --索引列
--ALL_IND_COLUMNS;
--USER_IND_COLUMNS;

(2).删除

drop INDEX indexName;

 

31.同义词

引入同义词原因:
在开发数据库应用程序时, 应该普遍遵守的规则是尽量避免直接引用表,视图或其他对象.
否则,当DBA改变了表的名称或者结构,就必须重新改变并编译应用程序.
因此需要为对象建立同义词.

建立对象条件:
1.重要的对象;
2.分布式系统;
3.名称长而复杂;

语法:
create [or replace] public Synonym synonym_name
for [schema.]ojbect;

ege:
create or replace SYNONYM syn_students
for students

使用同义词:
select * from syn_students;
insert into syn_students values (**, **, **,..);

 

32.序列

需求
1.主键, 外键;
2.流水号;

创建:
create Sequence sequence
[start with n1]              --起始值
[increment by n2]            --递增量
[{maxvlue n3 | nomaxvalue }] --最大值(如果没有指定最大值则为:1027)
[{minvlue n4 | nominvalue }] --最小值(同上:-1026)
[{cache n5 | nocache}]       --预分配的序列个数,使用不完作废
[{cycle | nocycle}]          --序列使用完后是否循环
[order];           --按顺序生成序列

ege;
create SEQUENCE Seq_id
Increment by 1
Start with 300
MaxVulue 999999999
MinVule 1
Cache 10
Order;

使用序列:
(1).下一个序列
sequence_name.nextval;

(2).当前序列
sequence_name.currval;

ege:
select * from sequence_name.currval from dual;

更改序列
Alter Sequence sequence
--同创建相同;

删除:
Drop Sequence sequence;

查看所有序列:
select * from user_sequence;

 

33. 视图

引入视图目的:
(1).提供各种数据表现形式
(2).提供某些数据的安全性
(3).隐藏数据的复杂性
(4).简化数据的查询语句
(5).执行特殊查询
(6).保存复杂查询

<1>.创建视图:
Create [Or Replace] [force]  View [Schema.] view_name
[(col1, col2, ...)]
As select ...
[With Check Option] [Constraint constraint_name]
[Woth Read Only];

说明:
--force: 强制创建视图,不考虑基础表是否存在或是否有权限, 这样保证操作的独立性;
--With Check Option: 使用视图时,检查涉及的数据是否通过select子查询的约束条件,否则不允许操作。

ege:
创建一般视图
Create View v_table
as
select * from
tableName;

创建连接视图:
Create View v_table
as
select a.col1, a.col2, b.col1, b.col5
from table1 a, table2 b
where a.col1=b.col5
and a.col2 in (values1, values2);

创建复杂视图
Create View v_table
As
select col1, avg(col2), sum(col3), max(col4), min(col5)
from table
group by col1;

<2>.使用视图
1.select
select * from view_name;

2.DML操作
对于基础表为一张表的直接使用 DML语句
对于基础表为多张表的视图使用下列方法:
键保存表概念:
--如果连接视图中的一个基础表的键(主键,唯一键)在它的视图中仍然存在, 则称这个基础表为
  键保存表(key-preserved)。键保存表中的主键在他的视图中仍然是主键。
  即:子表为键保存表,父表为非键保存表;

原则:
1.一次只能对视图中的一个键保存表进行更新。
2.如果视图有 With Check Option选项
  则不能对连接视图执行 DML 操作

<3>.修改视图:
由于视图只是一个虚表,更改只是更改它的定义。
使用下面方法会重新创建一个新的视图,但会保留原视图上的所有设置(如授权等)
Create or replace view v_table

<4>.删除视图
Drop View view_table

<5>.查看视图字典:
user_views;

 

34. 口令策略

--创建用于口令的概要文件(口令策略)
--此概要文件为系统自带的口令策略文件
create profile default limit
password_life_time 60         --60天内必须使用此口令
password_grace_time 10        --60天后的10天里必须更改此口令
password_reuse_time 1800      --1800天内不可重用此口令
password_reuse_max unlimited  --下次使用此口令时中间要换口令无限次(也就是说:永远不再使用此口令)
password_login_attempts 3     --口令输入累计的失败次数, 3次后用户锁死此用户
password_lock_time 1    --锁死时间:1天

--系统自带的口令校验脚本
password_verify_function verify_function;  --口令校验脚本(为一函数,名称为:verify_function)

--创建用户或修改用户时添加口令管理(default)
create user userName Profile default;
alter user userName2 profile default;

--锁定账户
Alter user userName Account Lock;

--解锁账户
Alter user userName Account UnLock;

 

35. ORACLE函数大全 (SQL中的单记录函数)

一. 字符
1.ASCII
返回与指定的字符对应的十进制数;
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

 

        A         A      ZERO     SPACE
--------- --------- --------- ---------
       65        97        48        32


2.CHR
给出整数,返回对应的字符;
SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C
-- -
赵 A

3.CONCAT
连接两个字符串;
SQL> select concat('010-','88888888')||'转23'  高乾竞电话 from dual;

高乾竞电话
----------------
010-88888888转23

4.INITCAP
返回字符串并将字符串的第一个字母变为大写;
SQL> select initcap('smith') upp from dual;

UPP
-----
Smith


5.INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1    被搜索的字符串
C2    希望搜索的字符串
I     搜索的开始位置,默认为1
J     出现的位置,默认为1
SQL> select instr('oracle traning','ra',1,2) instring from dual;

 INSTRING
---------
        9


6.LENGTH
返回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;

NAME   LENGTH(NAME) ADDR             LENGTH(ADDR)       SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾竞            3 北京市海锭区                6   9999.99                    7

 

7.LOWER
返回字符串,并将所有的字符小写
SQL> select lower('AaBbCcDd')AaBbCcDd from dual;

AABBCCDD
--------
aabbccdd


8.UPPER
返回字符串,并将所有的字符大写
SQL> select upper('AaBbCcDd') upper from dual;

UPPER
--------
AABBCCDD

 

9.RPAD和LPAD(粘贴字符)
RPAD  在列的右边粘贴字符
LPAD  在列的左边粘贴字符
SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual;

LPAD(RPAD('GAO',1
-----------------
*******gao*******
不够字符则用*来填满


10.LTRIM和RTRIM
LTRIM  删除左边出现的字符串
RTRIM  删除右边出现的字符串
SQL> select ltrim(rtrim('   gao qian jing   ',' '),' ') from dual;

LTRIM(RTRIM('
-------------
gao qian jing


11.SUBSTR(string,start,count)
取子字符串,从start开始,取count个
SQL> select substr('13088888888',3,8) from dual;

SUBSTR('
--------
08888888


12.REPLACE('string','s1','s2')
string   希望被替换的字符或变量
s1       被替换的字符串
s2       要替换的字符串
SQL> select replace('he love you','he','i') from dual;

REPLACE('H
----------
i love you


13.SOUNDEX
返回一个与给定的字符串读音相同的字符串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values('weather');
SQL> insert into table1 values('wether');
SQL> insert into table1 values('gao');

SQL> select xm from table1 where soundex(xm)=soundex('weather');

XM
--------
weather
wether


14.TRIM('s' from 'string')
LEADING   剪掉前面的字符
TRAILING  剪掉后面的字符
如果不指定,默认为空格符

二.数字处理

15.ABS
返回指定值的绝对值
SQL> select abs(100),abs(-100) from dual;

 ABS(100) ABS(-100)
--------- ---------
      100       100


16.ACOS
给出反余弦的值
SQL> select acos(-1) from dual;

 ACOS(-1)
---------
3.1415927


17.ASIN
给出反正弦的值
SQL> select asin(0.5) from dual;

ASIN(0.5)
---------
.52359878


18.ATAN
返回一个数字的反正切值
SQL> select atan(1) from dual;

  ATAN(1)
---------
.78539816


19.CEIL
返回大于或等于给出数字的最小整数
SQL> select ceil(3.1415927) from dual;

CEIL(3.1415927)
---------------
              4


20.COS
返回一个给定数字的余弦
SQL> select cos(-3.1415927) from dual;

COS(-3.1415927)
---------------
             -1


21.COSH
返回一个数字反余弦值
SQL> select cosh(20) from dual;

 COSH(20)
---------
242582598


22.EXP
返回一个数字e的n次方根
SQL> select exp(2),exp(1) from dual;

   EXP(2)    EXP(1)
--------- ---------
7.3890561 2.7182818


23.FLOOR
对给定的数字取整数
SQL> select floor(2345.67) from dual;

FLOOR(2345.67)
--------------
          2345


24.LN
返回一个数字的对数值
SQL> select ln(1),ln(2),ln(2.7182818) from dual;

    LN(1)     LN(2) LN(2.7182818)
--------- --------- -------------
        0 .69314718     .99999999


25.LOG(n1,n2)
返回一个以n1为底n2的对数
SQL> select log(2,1),log(2,4) from dual;

 LOG(2,1)  LOG(2,4)
--------- ---------
        0         2


26.MOD(n1,n2)
返回一个n1除以n2的余数
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;

MOD(10,3)  MOD(3,3)  MOD(2,3)
--------- --------- ---------
        1         0         2


27.POWER
返回n1的n2次方根
SQL> select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)
----------- ----------
       1024         27


28.ROUND和TRUNC
按照指定的精度进行舍入
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
         56          -55          55          -55


29.SIGN
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0
SQL> select sign(123),sign(-100),sign(0) from dual;

SIGN(123) SIGN(-100)   SIGN(0)
--------- ---------- ---------
        1         -1         0


30.SIN
返回一个数字的正弦值
SQL> select sin(1.57079) from dual;

SIN(1.57079)
------------
           1


31.SIGH
返回双曲正弦的值
SQL> select sin(20),sinh(20) from dual;

  SIN(20)  SINH(20)
--------- ---------
.91294525 242582598


32.SQRT
返回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;

 SQRT(64)  SQRT(10)
--------- ---------
        8 3.1622777


33.TAN
返回数字的正切值
SQL> select tan(20),tan(10) from dual;

  TAN(20)   TAN(10)
--------- ---------
2.2371609 .64836083


34.TANH
返回数字n的双曲正切值
SQL> select tanh(20),tan(20) from dual;

 TANH(20)   TAN(20)
--------- ---------
        1 2.2371609

 

35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;

   TRUNC1 TRUNC(124.16666,2)
--------- ------------------
      100             124.16

 

三. 日期

36.ADD_MONTHS
增加或减去月份
SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA
------
200002
SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA
------
199910


37.LAST_DAY
返回日期的最后一天
SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;

TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;

LAST_DAY(S
----------
31-5月 -04


38.MONTHS_BETWEEN(date2,date1)
给出date2-date1的月份
SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;

MON_BETWEEN
-----------
          9
SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;

 MON_BETW
---------
      -60


39.NEW_TIME(date,'this','that')
给出在this时区=other时区的日期和时间
SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time
  2  (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

BJ_TIME             LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32


40.NEXT_DAY(date,'day')
给出日期date和星期x之后计算下一个星期的日期
SQL> select next_day('18-5月-2001','星期五') next_day from dual;

NEXT_DAY
----------
25-5月 -01

 

41.SYSDATE
用来得到系统的当前日期
SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual;

TO_CHAR(SYSDATE,'
-----------------
09-05-2004 星期日
trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒
SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,
  2  to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH                  HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00

 

42.CHARTOROWID
将字符数据类型转换为ROWID类型
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;

ROWID              ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES


43.CONVERT(c,dset,sset)
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集
SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;

conver
------
strutz


44.HEXTORAW
将一个十六进制构成的字符串转换为二进制


45.RAWTOHEXT
将一个二进制构成的字符串转换为十六进制

 

46.ROWIDTOCHAR
将ROWID数据类型转换为字符类型

 

47.TO_CHAR(date,'format')
SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2004/05/09 21:14:41

 

48.TO_DATE(string,'format')
将字符串转化为ORACLE中的一个日期


49.TO_MULTI_BYTE
将字符串中的单字节字符转化为多字节字符
SQL>  select to_multi_byte('高') from dual;

TO
--


50.TO_NUMBER
将给出的字符转换为数字
SQL> select to_number('1999') year from dual;

     YEAR
---------
     1999

 

四. 其他
51.BFILENAME(dir,file)
指定一个外部二进制文件
SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));


52.CONVERT('x','desc','source')
将x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
  2  0,'none',
  3  2,'insert',
  4  3,
  5  'select',
  6  6,'update',
  7  7,'delete',
  8  8,'drop',
  9  'other') cmd  from v$session where type!='background';

      SID   SERIAL# USERNAME                       CMD
--------- --------- ------------------------------ ------
        1         1                                none
        2         1                                none
        3         1                                none
        4         1                                none
        5         1                       

你可能感兴趣的:(J2EE--数据存储)