第6课 oracle里的高级命令

1,  事物:

事物是数据库里一个很重要的概念:它用于保证数据的一致性,它由一组相关的dml(数据控制语句:只包括增删改)组成,该组数据要么全部成功,要么全部失败。

举例说明:网上转账,要保证转账双方的总和相等,才不会有麻烦,要么转和收都成功,要么都不成功,次啊能保证,这就叫事物

        

事物还有一个锁的概念:

举例说明:很多很多应用程序都同时访问一份数据,怎么办,这时候只有这样,想上厕所,进去一个,锁上门,出来后,第二个才上,要排队;

 Commit :

当对数据库使用commit后,会确认事物的变化,结束事物,删除保存点,释放锁等;

 下面来看一个在java中如何使用事物保证数据的安全:

从一个雇员的薪水减去10,在另外一个雇员加上这10:

1,  使用jdbc连接oracle:同上;

     Import java.sql.* ;

     Class.forName("oracle.jdbc.driver.OracleDriver");//注意大小写;

Connectionct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myora","scott","tiger");

     Statement sm=ct.createStatement();

 2,取消数据库的自动提交功能:sm.setAutoCommit(false);

3,用得到的数据库引用对象来处理数据表:sm.executeUpdate(“updateemp set sal=sal-10 where ename=’SMITH’”);             。。。。1

                                      Sm.executeUpdate(“updateemp set sal=sal+10 where ename =’SCOTT’”);            。。。。2

4,手动提交:sm.commit();

5,关闭资源:sm.close();ct.close();

6,若遇到异常:进行实物回滚:在try…catch{   ct.rollback();};//这里就保证了1,2要么同时进行,要么都不执行,保证了数据库的安全性,尤其在银行数据处理尤为重要;


只读事物:

保证只读取某个时间点的更新的数据,以后更新的数据不会影响查询的数据:(针对多用户操作同一个数据库的情况)

Set transactionread only;   // 注意设置为只读事物后,其他用户的增删改等语句不会影响当前用户的产寻到的数据;

比如在18:00要查询今天的销售情况:可以设置只读事物:之后的销售金额,不计在内;


Sql函数:

1,  字符函数:

Lower(char);将字符串转化为小写

  Upper():

  Length(char):放回字符串的长度;

  Substr(char,m,n):取子串,m,起始位(以1为底,n表示取字符数目);

  例子:以首字母大写,其他字母小写的方式显示所有员工姓名:注意使用连接符||;

   //Select upper(substr(ename,1,1)) from emp;

   Repale(char2,原来字符,代替字符):替换字母:

   Instr(char1,char2,[,n,[,m]]):取子串在字符串的位置;

 2,  数学函数:

常用的有

Abs(n):绝对值;Acos(n),asin(n),atan(n),exp(n),long(n,m),power(n,m);

cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round等等

Round(n,[m]):四省五入;没有m的话,省到整数,m>0,四省五入到小数点m位;m<0,四省五入到整数位的m位前,round(55.6 ,-1)=50;n表示数字

Trunc(n,[m]):大体同round,只是他不是四省五入,他直接截取,

Mod(m,n): :取余

Floor(n): 返回小于或者等于n的最大整数;

Ceil(n):返回大于或者等于n的最小整数;

 

注意:dual表:

     在做函数测试时使用这个虚拟表:如select mod(10,3) from dual;

 

3,日期函数:

Sysdate:  返回系统时间,日期;

Add_months(d,n):  d:表示计时起点,n表示加多少个月;

例子:查找8个月入职前的员工:select* from emp where sysdate>add_month(hiredate,8);

 Last_day(d)::返回指定日期所在月份的最后一天:

to_date:  改变日期格式为任何格式:

   例子:

Insert into emp values(9998,’xiaohong’,’MANAGER’,7782,to_date(‘1988/12/12’,’yyyy/mm/dd’);

4转换函数:

  虽然oracle 可以进行隐性转换,但是为了提高可读性,使用类型转换函数是必要的:

其中to_char 是很有用的转换函数:


例子:

select ename, to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),to_char(sal,'L99,999.99') from emp; 按照规定格式显示日期和薪水;



5,系统函数:

sys_context

a, terminal : 当前用户所对对用的终端的标示符;

b,lanuage: 语言;

c, db_name: 当前数据库实例名

d,nls_date_format : 日期格式;

e,session_user:  数据库用户名

f,current_schema:当前用户的方案名;

g,host,数据库所在主机名

例子:select sys_context('userenv','db_name') from dual;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值