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

Oracle学习笔记(六)

2010-11-04 17:41 239 查看
《子查询的妙用》

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

用子查询插入数据:

例子:新建一张表,把10号部门的信息插入表中。

create table kkk(

  myid number(4),

  myname varchar(50),

  myDept number(5)

)

insert into kkk (myid,myname,myDept) select empno,ename,deptno from emp where deptno=10;

select * from kkk;

用子查询更新数据:

例子:希望员工scott的岗位、工资、补助与smith员工的一样。

update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='smith') where ename='scott';

-------------

事务:用于保证数据的一致性,它由一组相关的dml语句(增,删,改)组成.

提交事务:commit;

回退事务:先设置保存点(可以设置多个保存点),savepoint a;回滚 rollback to a;commit后,保存点消失。如果没有commit,但exit了,则它会自动提交。

事务的几个重要操作:设置保存点 savepoint a,取消部分事务rollback to a,取消全部事务 rollback

《java程序中如何使用事务》

例子:从一个账户减去10,在另一个账户加10

package yzh;

import java.sql.*;

public class OracleConnect2 {

 

 public static void main(String[] args) {

  Connection con=null;

  Statement st=null;

  ResultSet rs=null;

  try{

   System.out.println("++++++++++++++++++");

   Class.forName("oracle.jdbc.driver.OracleDriver");

   con=DriverManager.getConnection("jdbc:oracle:thin:@WWW-EB6353B8576:1521:orcl","system","yzh");

   //加入事务处理

   con.setAutoCommit(false);

   

      st=con.createStatement();

      st.executeUpdate("update emp set sal=sal-10 where ename='heizi'");

   //加入异常

   //int i=7/0;

      st.executeUpdate("update emp set sal=sal+10 where ename='xiaohei'");

   //提交事务

   con.commit();

  }catch(Exception e){

      try{

     con.rollback();

   }catch(Exception ee){

     ee.printStackTrace();

   }

   e.printStackTrace();

  }finally{

   try{

    rs.close();

    st.close();

    con.close();

   }catch(Exception ex){

    ex.printStackTrace();

   }

  }

 }

}

------------

只读事务:只允许执行查询的操作,而不允许执行任何其他dml操作的事务,使用它可以确保用户只能取得某时间点的数据。

设置只读事务:set transaction read only

-------------

《Sql函数的使用》

字符函数:

lower(char) :将字符串转化为小写格式//select lower(name) from student;

upper(char) :将字符串转化为大写格式//select upper(name) from student;

length(char):返回字符串长度//select * from student where length(name)=5;

substr(char,m,n):取字符串的子串,m代表从第几位取,n代表取几个字符//select substr(name,2,3) from student;//

首字母大写,其余小写:

第一步:select upper(substr(name,1,1)) from student;

第二步:select lower(substr(name,2,length(name)-1)) from student;

合并:select upper(substr(name,1,1))||lower(substr(name,2,length(name)-1)) from student;

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

replace(char1,search_string,replace_string):替换

数学函数:

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

常用的有

round(n,[m]),用于执行四舍五入,如果省去m,则四舍五入到整数;如果m是正数,则四舍五入到小数点的m位后;如果m是负数,则四舍五入到小数点的m位前

trunc(n,[m]),用于截取数字。如果省掉m,就截掉小数部分,如果m是正数,则截取到小数点m位后,如果m是负数,则截取到小数点的前m位

mod(m,n),取模

floor(n),返回小于或是等于n的最大整数

ceil(n),返回大于或是等于n的最小整数

abs(n),返回绝对值

power(m,n),返回m的n次幂

日期函数:

默认情况下日期格式是dd-mon-yy 即12-5月-88

sysdate:该函数返回系统时间

add_months(d,n)

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

例子:查询入职8个多月的员工信息

select * from emp where sysdate>add_months(hiredate,8);//add_months(hiredate,8);表示雇佣时间加上八个月时间

显示满十年服务年限的员工的姓名和受雇日期

select * from emp where sysdate>add_months(hiredate,8);//add_months(hiredate,12*10);

对于每个员工,显示其加入公司的天数

select trunc(sysdate-hiredate) "入职天数" from emp ;

找出各月倒数第三天受雇的所有员工

select * from emp where  last_day(hiredate)-2=hiredate;

转换函数:

Oracle可以进行隐含的数据类型的转换,但是它并不适应所有情况。

to_char()

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

select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;

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

//已知:sal number(7,2)

select ename,to_char(sal,'L99999.99') from emp;//L表示本地货币符号

select ename,to_char(sal,'L99,999.99') from emp;

select ename,to_char(sal,'$99,999.99') from emp;//美金符号

显示1980年入职的所有员工?

select * from emp where to_char(hiredate,'yyyy')=1980;

显示所有12月份入职的员工?

select * from emp where to_char(hiredate,'mm')=12;

to_date()函数:

系统函数:

sys_context

参数:

terminal:当前会话客户所对应的终端的标识符

language:语言

db_name:当前数据库名称

nls_date_format:当前会话客户所对应的日期格式

session_user:当前会话客户所对应的数据库用户名

current_schema:当前会话客户所对应的默认方案名

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;

方案名跟用户名一样的.Oracle以方案的方式组织数据对象。方案中有视图、函数、表等。

 

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