您的位置:首页 > 数据库 > Oracle

玩转Oracle(4)

2010-05-17 22:45 323 查看
//使用自定义函数定义日期格式
to_date('1982-11-11','yyyy-mm-dd')
to_date('1982/11/11','yyyy/mm/dd')

//希望员工scott的岗位,工资,补助与smith员工一样
update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';

||------- java使用oracle -------||

//jdbc-odbc
//1.加载驱动 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//2.得到连接 conn = DriverManager.getConnection("jdbc:odbc:oracle_source","scott","tiger");

//jdbc直连
//1.加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver");
//2.得到连接 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");

||------- oracle的事物处理 -------||

dml语句 //增删改
当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户改表的结构,这里对我们用户来讲是非常重要的

//回滚命令
savepoint a; //存储回滚点
rollback to a; //回滚到存储点
rollback //取消全部事物
commit; //当执行了commit就不能回滚了
exit; //退出则自动提交事务

//java使用事务
conn.setAutoCommit(false); //设置不自动提交
conn.commit(); //手动提交
conn.rollback(); //如果出现异常回滚事物

//只读事物:只允许查询的操作,而不允许其他dml的操作
set transaction read only;

||------- oracle的sql函数 -------||

//
//字符函数
//

lower(char) //小写
upper(char) //大写
length(char) //长度
substr(char,m,n) //取字符串的子串
replace(char1,search_string,replace_string) //替换函数
instr(char1,char2,[,n[,m]]) //取子串在字符串的位置

//将所有员工的名字按小写的方式显示
select empno,lower(ename) from emp;

//将所有员工的名字按大写的方式显示
select empno,upper(ename) from emp;

//显示正好为5个字符的员工姓名
select * from emp where length(ename) = 5;

//显示所有员工名字前3个字符
select substr(ename,1,3) from emp;

//以首字母大写的方式显示所有员工姓名
select (upper(substr(ename,0,1))) || (lower(substr(ename,2,length(ename)))) as ename from emp;

//将员工名字中所有的A字符替换成tiger
select replace(ename,'A','tiger') from emp;

//显示A在员工名字中的位置
select ename,instr(ename,'A') from emp;

//
//数学函数
//

cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round
round(n,[m]) //四舍五入 round(sal,2)=2456.36
trunc(n,[m]) //截取数字 trunc(sal,1)=2456.3 截取小数点1位,不考虑四舍五入,默认截取到整数位
floor(n) //返回小于或等于n的最大整数 向下取整
ceil(n) //返回大于或是等于n的最大整数 向上取整
mod(m,n) //取模

//在做oracle测试的时候可以使用dual表(测试表)
select mod(10,6) from dual;

//显示在一个月为30天的情况,所有员工的日薪金,忽略余数
select floor(sal/30) from emp;

//
//日期函数
//

oracle的默认日期格式是dd-mon-yy 12-7月-78
sysdate //返回系统时间
add_months(d,n) //add_months(日期,月)
last_day(d) //返回指定日期所在月份的最后一天

//查找已经入职8个月多的员工
select * from emp where sysdate>add_months(hiredate,8);

//显示满10年服务年限的员工的姓名和受雇日期
select * from emp where sysdate>=add_months(hiredate,12*10);

//对于每个员工,显示其加入公司的天数
select trunc(sysdate-hiredate) from emp;

//找出各月倒数第3天受雇的所有员工
select * from emp where hiredate = last_day(hiredate)-2 ;

//
//转换函数
//

to_char //将date转换成字符类型
to_date //将字符串转换成date
sys_context //7个参数
1.terminal //当前会话客户所对应的终端标识符
2.language //语言
3.db_name //当前数据库名称
4.nls_date_format //当前会话客户所对应的日期格式
5.session_user //当前会话客户所对应数据库的用户名
6.current_schema //当前会话客户所对应的默认方案名
7.host //返回数据库所在主机的名称

SQL> select sys_context('userenv','db_name') from dual;

//日期是否可以显示 时/分/秒

yy //两位数字的年份 2004->04
yyyy //四位数字的年份 2004年
mm //两位数字的月份 8月->08
dd //2位数字的天 30号->30
hh24 //8点->20
hh12 //8点->08
mi //分钟
ss //秒

insert into emp values (sysdate,23,23,10); //添加系统时间,以时分秒存入
select ename,to_char(hiredate,'yyyy/mm/dd hh24:mi:ss') from emp;

//薪水是否可以显示指定的货币符号

9 //显示数字,并忽略前面0
0 //显示数字,如位数不足,则用0补齐
. //在指定位置显示小数点
, //在指定位置显示逗号
$ //在数字前加美元
L //在数字前加本地货币符号
C //在数字前加国际货币符号
G //在指定位置显示组分隔符
D //在指定位置显示小数点符号(.)

select to_char(sal,'L99999.99') from emp; ¥3222.00

//显示1980年入职的所有员工
select * from emp where to_char(hiredate,'yyyy')=1980;

//显示所有12月份入职的员工
select * from emp where to_char(hiredate,'mm')=12;

//使用sys_context函数的7种用法
SYS_CONTEXT('USERENV','DB_NAME
--------------------------------------------------------------------------------
orcl

SQL> select sys_context('userenv','session_user') from dual;

SYS_CONTEXT('USERENV','SESSION
--------------------------------------------------------------------------------
SCOTT

SQL> select sys_context('userenv','language') from dual;

SYS_CONTEXT('USERENV','LANGUAG
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL> select sys_context('userenv','host') from dual;

SYS_CONTEXT('USERENV','HOST')
--------------------------------------------------------------------------------
WORKGROUP/VALEN-PC

SQL> select sys_context('userenv','nls_date_format') from dual;

SYS_CONTEXT('USERENV','NLS_DAT
--------------------------------------------------------------------------------
DD-MON-RR

SQL> select sys_context('userenv','terminal') from dual;

SYS_CONTEXT('USERENV','TERMINA
--------------------------------------------------------------------------------
VALEN-PC

SQL> select sys_context('userenv','current_schema') from dual;

SYS_CONTEXT('USERENV','CURRENT
--------------------------------------------------------------------------------
SCOTT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: