扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
事务是为了保证数据的完整性而设置的,在使用事务时,如果你是使用程序进行控制的话,一般都会自动提交事务的,需要手动进行事务的操作的是在进行批处理的时候,为了保证数据要么一起成功要么一起失败,在开始数据的插入或者删除之前,要把事务的自动提交改为false,然后才能执行相关的SQL语句,当SQL无异常全部执行完以后,再手动提交就可以了
公司主营业务:做网站、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出石龙免费做网站回馈大家。
BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理
BeginTrans和CommitTrans 用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句
在存储过程中写一个语句用于对主表进行修改,然后
针对主表写一个update触发器,当主表进行修改进相关的副表就也能进行相应的修改了。
事务没有提交之前是不会对数据库中的数据进行操作的,只有commit以后才能实现,所以
要想得到修改后的记录,必须在提交以后将你所需要值赋到一个变量中然后返回这个变量。
再在一个新的存储过程中调用那一个专门用来获取返回值的存储过程,下次调用此方法时,
只需调用此新的存储过程就行了,既获取到修改后的值又执行了修改操作,何乐而不为呢?
至于怎么获取未修改以前的值就不用我说了,我知道你会做。
这样的话,这个问题就解决了。。
这是我个人的观点,如果不正确请予以批评和指证。谢谢。
在C# 和 VB.NET 中使用数据库事务您可以使用 OracleTransaction 类的一个对象来表示一个事务。OracleTransaction 类包含多个属性,其中的两个为 Connection(指定与事务关联的数据库连接)和 IsolationLevel(指定事务隔离级别);本文稍后将向您介绍更多有关事务隔离级别的内容。 OracleTransaction 类包含许多操控事务的方法。您可以使用 Commit() 方法永久提交 SQL 语句,并可以使用 Rollback() 撤销这些语句。您还可以使用 Save() 在事务中设置一个保存点。 我现在将带着您逐步完成两个示例程序 ― 一个用 C# 编写 (TransExample1.cs),另一个用 VB.NET 编写 (TransExample1.vb)。这些程序演示了如何执行一个包含了两条 INSERT 语句的事务。第一条 INSERT 语句将在表 product_types 中添加一行,第二条将在表 products 中添加一行。 导入命名空间以下C# 程序语句指定在程序中使用 System 和 Oracle.DataAcess.Client 命名空间: using System; using Oracle.DataAccess.Client;下面是等价的 VB.NET 语句: Imports System Imports Oracle.DataAccess.ClientOracle.DataAccess.Client 命名空间是 ODP.NET 的一部分,它包含许多类,其中有OracleConnection、OracleCommand 和 OracleTransaction。示例程序用到了这些类。 第1 步 创建一个 OracleConnection 对象连接到 Oracle 数据库,然后打开该连接。 在C# 中: OracleConnection myOracleConnection = new OracleConnection( "User Id=store;Password=store;Data Source=ORCL" ); myOracleConnection.Open();在VB.NET 中: Dim myOracleConnection As New OracleConnection( _ "User Id=store;Password=store;Data Source=ORCL") myOracleConnection.Open()User Id 和 Password 属性指定了您所要连接到的模式的数据库用户和口令。Data Source 属性指定了数据库的 Oracle Net 服务名称;初始数据库的默认服务名称为 ORCL。如果您使用的不是初始数据库,或者您的服务名称不同,那么您需要在程序中修改 Data Source 属性的设置。 第2 步 创建一个 OracleTransaction 对象,然后调用 OracleConnection 对象的 BeginTransaction() 方法启动事务。 在C# 中: OracleTransaction myOracleTransaction = myOracleConnection.BeginTransaction(); In VB.NET: Dim myOracleTransaction As OracleTransaction = _ myOracleConnection.BeginTransaction()第3 步 创建一个 OracleCommand 对象,用于存储 SQL 语句。 在C# 中: OracleCommand myOracleCommand = myOracleConnection.CreateCommand();在VB.NET 中: Dim myOracleCommand As OracleCommand = myOracleConnection.CreateCommand因为OracleCommand 对象使用 OracleConnection 对象的 CreateCommand() 方法创建的,所以它自动使用在第 2 步中为 OracleConnection 对象设置的事务。 第4 步 将OracleCommand 对象的 CommandText 属性设为向表 product_types 中添加一行的第一条 INSERT 语句。 在C# 中: myOracleCommand.CommandText = "INSERT INTO product_types (" + " product_type_id, name" + ") VALUES (" + " 3, 'Magazine'" + ")";在VB.NET 中: myOracleCommand.CommandText = _ "INSERT INTO product_types (" _ " product_type_id, name" _ ") VALUES (" _ " 3, 'Magazine'" _ ")"
oracle的事务是以session开始登录后的第一条DML语句开始的,然后以DDL(drop,create,alter,rename等),TCL的rollback,commit,DCL(grant,revoke)结束。
当然你也可以手动设置事务属性,如只读事务或者顺序事务:
set transaction read only
set transaction isolation level SERIALIZABLE
以oracle自带的scott为例:
1、select
t1.ename,t2.ename
as
mgrname,d.dname
from
scott.emp
t1,scott.emp
t2,scott.dept
d
where
t1.mgr=t2.empno
and
t2.deptno=d.deptno
2、select
d.*
from
scott.dept
d,(select
rownum
n,
tt.*
from
(select
count(*)
c,deptno
from
scott.emp
group
by
deptno
order
by
c
desc)
tt)t
where
t.n=1
and
t.deptno=d.deptno
3、select
*
from(select
t.*,dense_rank()over
(partition
by
deptno
order
by
sal)
r
from
scott.emp
t
where
deptno=30)
where
r=3
4、select
*
from(select
t.*,rank()over
(partition
by
n
order
by
sal)
r
from
(select
''
as
n,tt.*
from
scott.emp
tt)
t)
where
r
between
5
and
10
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流