oracle数据操作和控制语言详解
oracle数据库基本语句

oracle数据库基本语句oracle 数据库是一种常用的关系型数据库管理系统,常用的oracle数据库包括oracle10g、oracle11g和oracle12c。
要掌握oracle的基本用法,必须掌握其基本的语句。
oracle的常用基本语句有:一、数据定义语言(DDL)1、创建数据表:CREATE TABLE 表名(字段名数据类型[完整性约束条件],字段名数据类型[完整性约束条件],……);2、修改数据表: ALTER TABLE 表名 ADD(字段名数据类型[完整性约束条件],字段名数据类型[完整性约束条件],……);3、删除数据表: DROP TABLE 表名;4、创建索引:CREATE [UNIQUE] INDEX 索引名ON 表名[字段名[,字段名];5、删除索引: DROP INDEX 索引名;三、数据控制语言(DCL)1、建立用户: CREATE USER 用户名 IDENTIFIED BY 密码;2、删除用户: DROP USER 用户名;3、授权:GRANT 权限 ON 对象 TO 用户[WITH GRANT OPTION];4、回收授权: REVOKR 权限 ON 对象 FROM 用户;5、控制事务: COMMIT/ROLLBACK;四、数据库控制语言(DBCL)1、创建数据库:CREATE DATABASE 数据库名;2、删除数据库: DROP DATABASE 数据库名;3、创建表空间:CREATE TABLESPACE 表空间名 SEGMENT SPACE MANAGEMENT 自动;4、删除表空间: DROP TABLESPACE 表空间名;5、管理会话: ALTER SYSTEM KILL SESSION ['会话号'];。
数据操作跟控制语言详解

下面我们看一个例子.我们有一个回滚段表空间大小是2G,在高峰时期需要10个回滚段以满足用户的需要,这些高峰在线用户只有小的事务。一周我们连续运行了4个大的事务,这些事务需要删除和加载数据,每一个撤销需要1G,回滚段的大小如下:
rb_large(initial 100M minextenta 2)
列目录是可选的,缺省的列的目录是所有的列名,包括comlumn_id,comlumn_id可以在数据字典视图ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到。
插入行的数据的数量和数据类型必须和列的数量和数据类型相匹配。不符合列定义的数据类型将对插入值实行隐式数据转换。NULL字符串将一个NULL值插入适当的列中。关键字NULL常常用于表示将某列定义为NULL值。
VALUES (SYSDATE,'Transfer to brokerage',-5000);
UPDATE brokerage
SET cash_balance=cash_balance+5000
WHERE account='Kiesha';
INSERT INTO brokerage_log(action_date,action,amount)
例
BEGIN
INSERT INTO ATM_LOG(who,when,what,where)
VALUES ('Kiesha',SYSDATE,'Withdrawal of $100','ATM54')
SAVEPOINT ATM_LOGGED;
UPDATE checking
数据库oracle基础知识

数据库oracle基础知识数据库Oracle是一款企业级关系数据库管理系统,被广泛应用于大型企业和政府机构。
为了从事Oracle数据库开发工作,需要掌握以下基础知识。
1. SQL语言SQL语言是Oracle数据库最常用的查询和管理语言。
它可以用于创建、修改和删除表格、存储过程和函数等对象。
SQL语言可以通过命令行工具或GUI工具(如Oracle SQL Developer)使用。
2. 数据类型Oracle数据库支持多种数据类型,包括字符型、数值型、日期型和布尔型等。
掌握各种数据类型的特点和使用方法对于正确存储数据非常重要。
3. 约束在Oracle数据库中,约束是定义表列或表之间关系的规则。
包括主键、外键、唯一约束和检查约束等。
理解和正确使用约束可以有效维护数据完整性。
4. 触发器触发器是一种在表上执行的操作,例如在插入、更新和删除时。
掌握触发器的创建和使用可以帮助开发者增强数据的一致性和完整性。
5. 存储过程和函数存储过程和函数是一些预定义的SQL语句,封装起来方便被调用。
存储过程和函数类似,但存储过程是没有返回值的,而函数则需要返回一个值。
掌握存储过程和函数的使用可以提高数据库的性能和效率。
6. 高可用性Oracle数据库提供了许多机制,确保在故障时保持数据库高可用性。
这包括了备份和恢复、灾备等方案。
掌握这些机制可以帮助开发者保障数据可靠性和业务连续性。
通过学习以上基础知识,可以使Oracle数据库开发者理解Oracle数据库的基本原理和概念。
并且可以使用这些知识来开发高效、高可用性、可扩展的Oracle数据库应用程序。
精通 oracle 10g plsql 编程-学习笔记

1.PL/SQL综述本章学习目标,了解如下内容:PL/SQL的功能和作用PL/SQL 的优点和特征;Oracle 10g、Oracle9i 的PL/SQL新特征1.1.SQL简介1.1.1.SQL语言特点SQL语言采用集合操作方式1.1.2.SQL语言分类●数据查询语言(SELECT语句):检索数据库数据。
●数据操纵语言(DML):用于改变数据库数据。
包括insert,update和delete三条语句。
●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句●数据定义语言(DDL):用户建立、修改和删除数据库对象。
●数据控制语言(DDL):用于执行权限授予和收回操作。
包括grant 和revoke两条命令。
1.1.3.SQL 语句编写规则●SQL关键字不区分大小写●对象名和列名不区分大小写●字符值和日期值区分大小写●书写格式随意1.2.PL/SQL简介1.3.Oracle 10G PL/SQL 新特征2.PL/SQL开发工具本章学习目标:学会使用SQL*PLUS学会使用PL/SQL developer;学会使用Procedure Builder。
2.1.SQL*PLUS在命令行运行SQL*PlusSqlplus [username]/[password] [@server]3.PL/SQL 基础学习目标:●了解PL/SQL块的基本结构以及PL/SQL块的分类;●学会在PL/SQL块中定义和使用变量●学会在PL/SQL块中编写可执行语句;●了解编写PL/SQL代码的指导方针;●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。
3.1.PL/SQL 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。
oracle的用法

oracle的用法Oracle是一个关系型数据库管理系统,常用于企业级应用的数据存储和管理。
以下是Oracle的常见用法:1. 数据库管理:Oracle提供了各种工具和功能来管理和维护数据库,包括创建和管理表、索引、视图、约束等数据库对象,了解数据库的状态和性能,备份和恢复数据库等。
2. 数据查询和操作:通过结构化查询语言(SQL),用户可以对Oracle数据库进行数据查询、插入、更新和删除操作。
可以根据条件过滤数据、排序和聚合数据,实现复杂的查询需求。
3. 数据安全和权限控制:Oracle提供了安全性功能,如用户认证、权限管理和数据加密等,以保护数据的机密性和完整性。
可以为不同用户或用户组分配不同的权限,限制对数据库对象的访问和修改。
4. 数据备份和恢复:通过Oracle的备份和恢复功能,可以定期备份数据库,以防止数据丢失或损坏。
在数据库发生故障时,可以使用备份文件进行数据恢复,保证业务的连续性。
5. 数据复制和集群:Oracle支持数据库的复制和集群部署。
通过数据库复制,可以将数据复制到不同的服务器上,以提高数据的可用性和性能。
通过数据库集群,可以将多个服务器连接在一起,形成一个逻辑上的单一数据库,实现高可用性和负载均衡。
6. 业务应用开发:Oracle提供了各种开发工具和API,可用于开发基于Oracle数据库的企业级应用。
可以使用编程语言(如Java、C#等)和数据库连接库(如JDBC、ODBC等)与Oracle数据库进行交互,实现应用程序的数据存储和访问。
7. 数据分析和报表:Oracle提供了数据分析和报表工具,如Oracle Business Intelligence(BI),以帮助用户从数据库中提取和分析数据。
可以创建统计报表、图表和仪表盘,帮助业务决策和分析。
总之,Oracle作为一种强大的数据库管理系统,通常用于企业级应用的数据存储、管理和分析。
它具有丰富的功能和工具,可满足各种数据管理和应用开发的需求。
orcal 操作命令

oracle 命令操作内容包括三大项:1.oracle基本操作语句2.SQLServer基本操作语句3.各种数据库连接方法**************************************************oracle基本操作语句********************************************************打开服务器net start oracleservicebinbo打开监听器lsnrctl start关闭服务器net stop oracleservicebinbo关闭监听器lsnrctl stop======================================================== =======清屏clear screen****************************************************************数据字典===========desc user_views(关键词)****************************************************************======================================================== =======查看当前用户的角色SQL>select * from user_role_privs;======================================================== =======查看当前用户的系统权限和表级权限SQL>select * from user_sys_privs;SQL>select * from user_tab_privs;======================================================== =======查看当前用户的缺省表空间SQL>select username,default_tablespace from user_users;======================================================== =======换用户conn as sysdbasystsinghuasqlplus "sys/tsinghua as sysdba"conn sys/zl as sysdba======================================================== =======修改表结构alter table test modify(name not null);alter table test add(name varchar2(20));alter table test drop column sex;alter table test set unused column sex;alter table test drop unused columns;======================================================== =======更改用户密码sql>alter user 管理员identified by 密码;======================================================== =======创建表空间的数据文件sql>create tablespace test datafile 'd:oraclebinbo.dbf' size 10m;======================================================== =======创建用户sql>create user 用户名identified by 用户名;======================================================== =======bfile类型实例创建目录create directory tnpdir as 'c:';删除目录drop directory tnpdir授权grant read on directory tn pdir to scott;建表create table bfiletest(id number(3), fname bfile);添加数据insert into bfiletest values(1,bfilename('TMPDIR','tmptest.java'));======================================================== =======查看用户sql>show user======================================================== =======检查语句是否有错show error======================================================== =======锁定用户sql>alter user 用户名account lock======================================================== =======解除用户sql>alter user 用户名account unlock======================================================== =======删除用户sql>drop user zl;======================================================== =======给用户创建表权限sql>grant create table to 用户名;======================================================== =======授管理员权限sql>grant dba to 用户名;======================================================== =======给用户登录权限sql>grant connect to 用户名======================================================== =======给用户无限表空间权限sql>grant unlinmited tablespace to 用户名;======================================================== =======收回权限sql>revoke dba from 用户名;======================================================== =======查看用户下所有的表SQL>select * from user_tables;======================================================== =======查看名称包含log字符的表SQL>select object_name,object_id from user_objectswhere instr(object_name,'LOG')>0;======================================================== =======查看某表的创建时间SQL>select object_name,created from user_objects whereobject_name=upper('&table_name');======================================================== =======查看某表的大小SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segmentswhere segment_name=upper('&table_name');======================================================== =======查看放在ORACLE的内存区里的表SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;======================================================== =======再添加一个表空间的数据文件sql>alter tablespace test add datafile 'd:oracletest1.dbf' size 10m;======================================================== =======建表 SQL>create table studen(stuno int,stuname varchar(8) not null,stubirth date default to_date('1987-5-9','YYYY-MM-DD'));向表结构中加入一列 SQL>alter table studen add(stuphoto varchar(9));从表结构中删除一列 SQL>alter table studen drop column stuphoto;修改表一列的长度 SQL>alter table studen modify(stuno number(4));隐藏将要删除的一列 SQL>alter table studen set unused column stuphoto;删除隐藏的列 SQL>alter table studen drop unused columns;向表中加入约束 SQL>alter table studen add constraint pk primary key(stuno);删除约束 SQL>alter table studen drop constraint pk;======================================================== =======创建表sql>create table 用户名(name varchar2(20),password varchar(20)) tablespace 空间名;======================================================== =======添加字段sql>alter table test add(column_x char(10) not null);======================================================== =======更改字段sql>alter table emp modify(column_x char (20));======================================================== =======删除字段如待删除域属于某个索引,则不允许删除操作,必须将此域先设置为NULL。
Oracle数据库语法总结

Oracle数据库语法总结一、DDL(数据定义语言)1、创建、删除表(1)CREATE TABLE 语句用于在Oracle数据库中创建新表:CREATETABLE表名(列1数据类型(大小/长度)[NOTNULL][CONSTRAINT约束名]列2数据类型(大小/长度)[NOTNULL][CONSTRAINT约束名]……(2)DROP TABLE 语句用于从Oracle数据库中删除表:DROPTABLE表名2、更改表(1)ALTERTABLE语句用于更改现有的表:ALTERTABLE表名ADD(添加新的列),MODIFY(修改现有的列),DROP(删除现有的列)(2)RENAME语句用于更改表名:RENAME表名1TO表名23、创建索引(1)CREATEINDEX语句用于在表中创建索引:CREATEINDEX索引名ON表名(列1,列2,...)(2)DROPINDEX语句用于从表中删除索引:DROPINDEX索引名4、创建约束(1)Primary Key 约束:ALTERTABLE表名ADDCONSTRAINT主键名PRIMARYKEY(列名)(2)Foreign Key约束:ALTERTABLE表名ADDCONSTRAINT外键名FOREIGNKEY(列名)REFERENCES参照表名(参照列);(3)Unique 约束:ALTERTABLE表名ADDCONSTRAINT唯一约束名UNIQUE(列1,列2,...);(4)NOTNULL约束:ALTERTABLE表名ADDCONSTRAINT非空约束名NOTNULL(列1,列2,...);5、删除约束(1)Primary Key 约束:ALTERTABLE表名DROPCONSTRAINT主键名PRIMARYKEY;(2)Foreign Key约束:ALTERTABLE表名DROPCONSTRAINT外键名FOREIGNKEY;(3)Unique 约束:。
Orecal数据库的基本操作语言

Orecal数据库的基本操作语言作者:吴昊王一冰吴丽君来源:《艺术科技》2016年第12期摘要:DB(database)数据库的简化缩写,可以说DB是按照数据结构来组织、存储和管理数据的仓库,随着信息技术和数据管理的需求,使得它出现于90年代,数据管理不仅需要存储和管理数据,而且要贴合用户的需求,变成可以对各种数据进行管理和操控的新方式。
数据库技术成为了管理系统、自动化系统等各类使用信息保存内库的核心部分。
关键词:DB;数据库;甲骨文说到数据库,我们就不得不提到DBMS数据库管理软件关系型数据库,其中按照公司分,市面上的数据库可以大致分为以下几类:Oracle数据库。
具有性能稳定、安全性高等优点,采用标准SQL语句,支持多种数据类型,提供面向对象的数据支持,支持Unix、Windows,但价格稍贵,一般大公司大项目会用到,而甲骨文公司的Oracle产品也是世界上第一个商品化关系型数据库关系系统。
DB2数据库,IBM公司的关系型数据库管理系统。
SQL Server数据库,微软公司的产品。
My SQL开放性的源码型数据库是SUN公司基于用户的开放性的、免费的数据库操纵软件,但不幸被Oracle收购。
在数据库中,所有的数据库都是用相同或相似的结构化查询语言,SQL(Structured Query Language)结构化查询语言它又可以具体的分为以下几类:数据定义语言(DDL,Data Definition Language):用于建立、修改、删除数据库对象。
CREATE:用于创建表或其他数据对象结构。
ALTER:修改表或其他数据对象结构。
DROP:删除表或其他数据对象的结构。
TRUNCATE:删除表数据,保留表结构。
数据操纵语言(DML,Data Manipulation Language):用于改变表中的数据。
INSERT:将数据插入到数据表中。
UPDATE:更新数据表中的已存在的数据。
DELETE:删除数据表中的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据操作和控制语言详解SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
其中用于定义数据的结构,比如创建、修改或者删除数据库;DCL用于定义数据库用户的权限;在这篇文章中我将详细讲述这两种语言在Oracle 中的使用方法。
DML语言DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句。
语句用途INSERT 向表中添加行UPDATE 更新存储在表中的数据DELETE 删除行SELECT FOR UPDATE 禁止其他用户访问DML语句正在处理的行。
LOCK TABLE 禁止其他用户在表中使用DML语句插入数据INSERT语句常常用于向表中插入行,行中可以有特殊数据字段,或者可以用子查询从已存在的数据中建立新行。
列目录是可选的,缺省的列的目录是所有的列名,包括comlumn_id,comlumn_id可以在数据字典视图ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到。
插入行的数据的数量和数据类型必须和列的数量和数据类型相匹配。
不符合列定义的数据类型将对插入值实行隐式数据转换。
NULL字符串将一个NULL值插入适当的列中。
关键字NULL常常用于表示将某列定义为NULL值。
下面的两个例子是等价的。
INSERT INTO customers(cust_id,state,post_code)VALUE('Ariel',NULL,'94501');或INSERT INTO customers(cust_id,state,post_code)VALUE('Ariel',,'94501');更新数据UPDATE命令用于修改表中的数据。
UPDATE order_rollupSET(qty,price)=(SELECT SUM(qty),SUM(price) FROM order_lines WHERE customer_id='KOHL'WHERE cust_id='KOHL'AND order_period=TO_DATE('01-Oct-2000')删除数据DELETE语句用来从表中删除一行或多行数据,该命令包含两个语句:1、关键字DELETE FROM后跟准备从中删除数据的表名。
2、WHERE后跟删除条件DELETE FROM po_linesWHERE ship_to_state IN ('TX','NY','IL')AND order_date清空表如果你想删除表中所有数据,清空表,可以考虑使用DDL语言的TRUNCATE语句。
TRUNCATE就像没有WHERE子句的DELETE 命令一样。
TRUNCATE将删除表中所有行。
TRUNCATE不是DML语句是DDL语句,他和DELETE右不同的特点。
TRUNCATE TABLE (schema)table DROP(REUSE) STORAGESTORAGE子串是可选的,缺省是DROP STORAGE。
当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。
REUSE STORAGE不会缩短表或者调整NEXT参数。
TRUNCATE和DELETE有以下几点区别1、TRUNCATE在各种表上无论是大的还是小的都非常快。
如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。
在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE 操作后的表要快得多。
4、TRUNCATE不能触发任何DELETE触发器。
5、不能授予任何人清空他人的表的权限。
6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
7、不能清空父表。
SELECT FOR UPDATEselect for update语句用于锁定行,阻止其他用户在该行上修改数据。
当该行被锁定后其他用户可以用SELECT语句查询该行的数据,但不能修改或锁定该行。
锁定表LOCK语句常常用于锁定整个表。
当表被锁定后,大多数DML语言不能在该表上使用。
LOCK语法如下:LOCK schema table IN lock_mode其中lock_mode有两个选项:share 共享方式exclusive 唯一方式例:LOCK TABLE intentory IN EXCLUSIVE MODE死锁当两个事务都被锁定,并且互相都在等待另一个被解锁,这种情况称为死锁。
当出现死锁时,ORACLE将检测死锁条件,并返回一个异常。
事务控制事务控制包括协调对相同数据的多个同步的访问。
当一个用户改变了另一个用户正在使用的数据时,oracle使用事务控制谁可以操作数据。
事务事务表示工作的一个基本单元,是一系列作为一个单元被成功或不成功操作的SQL语句。
在SQL和PL/SQL中有很多语句让程序员控制事务。
程序员可以:1、显式开始一个事物,选择语句级一致性或事务级一致性2、设置撤销回滚点,并回滚到回滚点3、完成事务永远改变数据或者放弃修改。
事务控制语句语句用途Commit 完成事务,数据修改成功并对其他用户开放Rollback 撤销事务,撤销所有操作rollback to savepoint 撤销在设置的回滚点以后的操作set transaction 响应事务或语句的一致性;特别对于事务使用回滚段例:BEGINUPDATE checkingSET balance=balance-5000WHERE account='Kieesha';INSERT INTO checking_log(action_date,action,amount)VALUES (SYSDATE,'Transfer to brokerage',-5000);UPDATE brokerageSET cash_balance=cash_balance+5000WHERE account='Kiesha';INSERT INTO brokerage_log(action_date,action,amount)VALUES (SYSDATE,'Tracfer from checking',5000)COMMITEXCEPTIONWHEN OTHERSROLLBACKENDSavepoint 和部分回滚(Partial Rollback)在SQL和PL/SQL中Savepoint是在一事务范围内的中间标志。
经常用于将一个长的事务划分为小的部分。
保留点Savepoint可标志长事务中的任何点,允许可回滚该点之后的操作。
在应用程序中经常使用Savepoint;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。
在回滚到一个Savepoint 之后,该Savepoint之后所获得的数据封锁被释放。
为了实现部分回滚可以用带TO Savepoint子句的ROLLBACK语句将事务回滚到指定的位置。
例BEGININSERT INTO ATM_LOG(who,when,what,where)VALUES ('Kiesha',SYSDATE,'Withdrawal of $100','ATM54')SAVEPOINT ATM_LOGGED;UPDATE checkingSET balance=balance-100RETURN balance INTO new_balance;IF new_balance<0THENROLLBACK TO ATM_LOGGED;COMMITRAISE insufficient_funda;END IFEND关键字SAVEPOINT是可选的,所以下面两个语句是等价的:ROLLBACK TO ATM_LOGGED;ROLLBACK TO SAVEPOINT ATM_LOGGED;一致性和事务一致性是事物控制的关键慨念。
掌握了oracle 的一致性模型,能使您更好的,更恰当的使用事务控制。
oracle通过一致性保证数据只有在事务全部完成后才能被用户看见和使用。
这项技术对多用户数据库有巨大的作用。
oracle常常使用语句级(state-level)一致性,保证数据在语句的生命期之间是可见的但不能被改变。
事务由多个语句组成,当使用事务时,事物级(transaction-level)一致性在整个事务生命期中保证数据对所有语句都是可见的。
oracle通过SCN(syatem change number)实施一致性。
一个SCN是一个面向时间的数据库内部键。
SCN只会增加不会减少,SCN表示了时间上的一个点,每个数据块都有一个SCN,通过比较这个点实施操作。
事务级一致性SET TRANSACTION 的一个作用是确保事务级一致或语句级一致中有一个实施。
ORACLE使用这些术语:ISOLATION LEVEL READ COMMIT 表示语句级一致ISOLATION LEVEL SERIALIZABLE 表示事务级一致。
例:SET TRANSACTION ISOLATION LEVEL READ COMMIT下面的语句也能确保事务级一致:SET TRANSCATION READ ONLY任何企图在只读(READ ONLY)事务中修改数据的操作都会抛出一个异常。
但是,READ ONLY事务只能在下列语句中使用:SELECT(没有FOR UPDATE子句)LOCK TABLESET ROLEALTER SYSTEMALTER ALARM即使没有改变任何数据,READ ONLY事务依然必须使用一个COMMIT或ROLLBACK以结束整个事务。
SET TRANSCTION的另外一个应用是在回滚时直接使用回滚段(ROLLBACK SEGMENT)。
回滚段是ORACLE的一个特殊的数据对象,回滚段的头部包含正在使用该回滚段事务的信息。
当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
oracle用round-robin给事务随机分配回滚段。
一个大的事务可以分配任何回滚段,这也许会导致回滚段的大小变得很大。