oracle 学习 3

来源:互联网 发布:淘宝企业店铺资料 编辑:程序博客网 时间:2024/05/29 17:01
===================================12 java操作oracle=============================49分钟


目标:
1 java程序如何操作oracle
2 如何在oracle中操作数据
3 orale事物处理
4 sql函数的使用


1)oracle表对数据操作技巧
2)java程序中操作oracle
3)oracle事物概念
4)oracle各种sql函数


1 使用特定格式插入日期值。——to_date 函数
to_date('1999-09-09','yyyy-mm-dd')


===================================13 oracle的事务 =============================55分钟


2 使用子查询插入数据


使用子查询,一条insert可以插入大量的数据
处理行迁移或者装载外部表的数据到数据库时,可以使用子查询来插入数据。


例如:
step1 create table copykk(kid number(10),kname varchar2(10),kdeptno number(10));
step2 insert into copykk(kid,kname,kdeptno) select empno,ename,deptno from scott.emp where deptno=10;


3 使用子查询更新数据
使用update语句更新数据库时,可以使用表达式,数值直接修改数据,也可以使用子查询修改数据。
——希望员工scott的岗位,工资,补助与smith员工一样。


update scott.emp set(job,sal,comm)=(select job,sal,comm from scott.emp where ename='SMITH') where ename='SCOTT';
select ename,job,sal,comm from scott.emp where ename='SMITH' or ename='SCOTT';


4 oracle的事务
什么是事务——保证数据的一致性,一组dml语句组成,要么全部成功,要不全部失败。
dml语句——数据操作语言。如增加,删除,修改。没有查询。
例如——网上转账。


1)事务和锁
oracle会在事务上加锁。锁的机制。文件锁,互斥锁。


2)提交事务
commit语句,执行了commit语句后,会确认事务的变化,结束事务,删除保持点,释放锁。
commit语句结束事务后,可以查看到变化后的新数据。


3)回退事务
保存点,savepoint。是事务中的一点,用于取消部分事务。事务结束时,会自动的删除该事务所定义的所有保存点。
当执行rollback时,通过指定保存点可以回退到指定的点。——必须在commit之前。如果,commit了,那么就无法回滚了。


事务的几个重要操作
a 设置保存点
savepoint a
b 取消保存点
rollback to a
c 取消事务
rollback




5 java程序中使用事务。
——账务转账。
conn.setAutoCommit(false);
conn.commit();
conn.rollback();




6 只读事务
只允许执行查询的操作,不允许其他dml操作的事务。
可以确保用户只能读取某时间点的数据。
比如——机票代售点每天18点开始统计今天的销售情况,这时可以使用可读事务。
设置了只读事务后,尽管其他会话可能提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。
设置只读事务——set transaction read only




===================================14 oracle的函数 1 =============================48分钟


7 sql函数的使用。
1)字符函数


lower(char)
upper(char)
length(char)
substr(char,m,n)
replace(char1,search_string,replace_string)
instr(char1,char2,[,n[,m]])——取子串在字符串的位置
——显示所有员工的姓名,用‘我是A’替换所有‘A’
select replace(ename,'A','我是A') from scott.emp;


——员工的名字按小写方式显示
select lower(ename) from scott.emp;


——员工的名字按大写方式显示
select upper(ename) from scott.emp;


——显示正好有5个字符的员工的姓名
select ename from scott.emp where length(ename)=5;


——显示所有员工姓名的前三个字符 1,代表从第几个取,3代表取的个数。
select substr(ename,1,3) from scott.emp;


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


——以首字母小写的方式显示所有员工的姓名
select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from scott.emp;




2)数学函数
cos
cosh
exp
ln
log
sin
sinh
sqrt
tan
tanh
acos
asin
atan
round


最常用的——在财务系统或银行系统中用的较多。
round(n,[m])——四舍五入,不写m,则四舍五入到整数。写m,则正数四舍五入到小数点的m位后,负数则四舍五入到小数点前的m位前。
trunc(n,[m])——截取数字。不写m,就截掉小数部分。写m,则正数截取到小数点的m位后,负数则截取到小数点前的m位前。
mod(m,n)
floor(n)——返回小于或者等于n的最大整数
ceil(n)——返回大于或者等于n的最小整数


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


在做oracle测试,可以使用dual表。




===================================15 oracle的函数 2 =============================40分钟




3)日期函数


默认下格式 dd-mon-yy  即 12-7月-1978
sysdate:返回系统时间
——select sysdate from dual;
add_months(d,n)
——查找入职8个月的员工
select * from scott.emp where sysdate>add_months(hiredate,8);
last_day(d)——返回指定日期所在月份的最后一天。


——显示满10年服务年限的员工的姓名和雇佣日期
select ename,hiredate from scott.emp where sysdate>=add_months(hiredate,120);


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


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




4)转换函数
oracle会隐形的转化数据类型
如:create table t1(id int);
insert into ti values('10');——oracle会自动转换。前提是可以转换。
so,很多时候,可以通通加个单引号,省事。


create table t1(id varchar2(10));
insert into ti values(10);


to_char函数——转换
yy,yyyy,mm,dd,hh24,hh12,mi,ss
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),to_char(sal,'L99,999.99') from scott.emp;


L99999.99——L代表我要现实本地的货币符号,99,999.99代表我要显示的格式,5位整数和2位小时。sal的数据类型是number(7,2)


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


to_char
——显示1980年入职的所有员工
select ename,hiredate from scott.emp where to_char(hiredate,'yyyy')='1980';
——显示12月份入职的所有员工
select ename,hiredate from scott.emp where to_char(hiredate,'mm')='12';


sys_context——系统函数
1)terminal——当前会话客户对应的终端的标识符
2)language——语言
3)db_name ——当前数据库名称
4)nls_date_format——当前会话客户所对应的日期格式
5)session_user——当前会话客户所对应的数据库用户名
6)current_schema——当前会话客户所对应的默认方案名?
7)host——返回数据库所在主机的名称


通过该函数,可以查询一些重要信息,比如你正在使用哪个数据库?
select sys_context('userenv','db_name') from dual;
select sys_context('userenv','language') from dual;
select sys_context('userenv','session_user') from dual;
select sys_context('userenv','current_schema') from dual;
userenv——固定的。


用户和方案的关系?
:一个用户对应一个方案,方案名就是用户名。
用户被创建,oracle自动给创建一个方案。oracle以方案的方式来管理数据对象。


方案里面有什么呢?
各种各样的数据对象,比如,表,视图,包,函数,触发器,存储过程,,,等等。
0 0
原创粉丝点击