韩顺平oracle视频笔记四

原创 2013年12月04日 09:55:25

事务用于保证数据的一致性,要么全部成功,要么全部失败,它由一组相关的DML语句组成(银行自动取款机操作)

oracle会在被作用表上添加锁,防止其它用户改表的结构。


savepoint a1;
delete from emp where ename='SMTITH';
select * from emp;
savepoint a2;
delete from emp where ename='SCOTT';
select * from emp;
rollback to a2;
select * from emp;
rollback to a1;
select * from emp;
备注:这里不能使用commit命令,否则之前所用的savepoint都将全部不起作用了

 

 

只读事务
只允许执行查询操作,不允许其它的DML操作事务,使用只读事务可以确保用户只能读取某时间点的数据,之后的数据将不会理睬。
例如机票代售点每天18点开始统计今天的销售情况,但是18点肯定还有人在操作数据库,因此这里使用只读事务之后就不会对统计造成影响
实验:
1、打开PLSQL工具输入:
set transaction read only;
select * from emp;
2、打开另一个PLSQL工具
insert into emp values(....);
select * from emp;
3、操作第一个打开的PLSQL工具,执行全部查询
select * from emp;
结果:发现第一个查询的数量和第二个PLSQL查询的数量是不一致的,这就是设置只读事务的功能
设置只读事务之后,将不会显示当前时间点之后的所有操作数据

 

ORACLE函数学习
字符函数
lower(char)转换为小写格式
SQL> select lower(job) from scott.emp ;
upper(char)转换为大写格式
SQL> select upper(job) from scott.emp ;
length(char)字符串的长度
SQL> select length(job) from scott.emp ;
select * from scott.emp where length(ename)=5;
substr(char,m,n)取字符串的子串
select substr(ename,2,3) from scott.emp;
备注:查询ename是从第2个字母开始取,长度为个字符

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

replace(char1,search_string,replace_string)
显示所有员工的姓名,用“我是A”替换“A”
select replace(ename,'A','我是大A') from scott.emp;

数学函数
round(n,[m])用户执行四舍五入
n表示要被作用的数据
m表示保留小数位
trunc(55.66,1)==55.7

trunc(n,[m])用于截取数字
n表示要被作用的数据
m表示保留小数位
trunc(55.66,1)==55.6
trunc(55.66,-1)==50
trunc(55.66)==55

mod(m,n)取模

floor(n)小于或者等于n的最大整数
ceil(n)大于或者是等于n的最小整数


查询已经入职超过300个月的员工信息
SQL> select * from scott.emp where sysdate>add_months(scott.emp.hiredate,300);
备注:sysdate为当前日期
add_months(scott.emp.hiredate,300)表示hiredate加上300个月

SQL> select sysdate-scott.emp.hiredate  from scott.emp;

package hb.com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class TestTrans {

	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		try {
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			System.out.println("driver is ok");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","admin");
			//不让oracle自动提交,而是手动提交数据
			conn.setAutoCommit(false);
			System.out.println("connection is ok");
			stmt = conn.createStatement();
			String sql1 = "update scott.emp set sal=sal-100 where ename='SMITH'";
			String sql2 = "update scott.emp set sal=sal-100 where ename='SCOTT'";
			stmt.execute(sql1);
			//这段代码是模拟操作出现异常的方法
			int a = 1/0;
			stmt.execute(sql2);
			//执行完上面两个SQL语句之后才commit
			conn.commit();
		} catch (SQLException e) {
			try {
			//如果出现异常将操作回滚,这样就能保证数据的一致性
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
		
		if(stmt!=null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

 

 

韩顺平oracle视频笔记一

使用@或者Start运行脚本sql>@ c:\insert.sqlsql>start c:\delete.sql 只能由dba角色才能创建用户create user huangbiao identi...
  • hbiao68
  • hbiao68
  • 2013年12月04日 09:55
  • 337

韩顺平oracle视频笔记二

char 定长  最大2000字符varchar2 变长 最大字符4000clob  字符型大对象 位4G number -10的38次方到10的38次方,可以表示整数和小数表示一个小数(数字为5位...
  • hbiao68
  • hbiao68
  • 2013年12月04日 09:55
  • 275

韩顺平oracle视频笔记三

查看一个表的结构desc scott.dept; 打开显示操作的开关,即相关操作显示多长时间set timing on; 指定查询列比查询所有列要快 create tables users(us...
  • hbiao68
  • hbiao68
  • 2013年12月04日 09:55
  • 267

【自学oracle】韩顺平oracle视频教程学习笔记

第一讲 oracle的数据对象(表,视图,序列,函数,包,过程,触发器) 不同的数据库 数据对象未必是完全相同的 例如sqlserver2000里面就没有包 多少人用(并发问题) 第二讲 1.9i...

韩顺平玩转oracle视频教程笔记

  • 2011年11月08日 22:11
  • 1.08MB
  • 下载

天易05----韩顺平oracle视频讲解部分总结(01)

desc 表名;(可查看该表的详细信息) showuser;(查看当前所使用的用户) 修改字段名:alter table [表名] rename column 旧的字段名 to 新的字段名; 1...

韩顺平玩转oracle视频教程笔记.doc

  • 2013年07月19日 11:34
  • 994KB
  • 下载

天易11----韩顺平oracle视频讲解部分总结(04)

系统函数:sys_context terminal:当前会话客户所对应的终端的标示符 language:语言 db_name:当前数据库名称 nls_date_formal:当前会话客户所对应...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 韩顺平oracle视频笔记四
举报原因:
原因补充:

(最多只允许输入30个字)