GVKun编程网logo

Oracle EBS OPM 事务处理(oracle事物)

3

关于OracleEBSOPM事务处理和oracle事物的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于C#mysql事务处理、Exceloracleaddin无法上传journaltoor

关于Oracle EBS OPM 事务处理oracle事物的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于C# mysql 事务处理、Excel oracle add in 无法上传journal to oracle ebs: members not found error0cle、jdbc 事务处理、JDBC(6)事务处理&批量处理等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Oracle EBS OPM 事务处理(oracle事物)

Oracle EBS OPM 事务处理(oracle事物)

--事务处理
--created by jenrry
DECLARE

  l_iface_rec      inv.mtl_transactions_interface%ROWTYPE;
  l_iface_lot_rec  inv.mtl_transaction_lots_interface%ROWTYPE;
  l_cur_mfg_org_id NUMBER := 127; --Current Inv Organization
  l_user_id        NUMBER := 0; --User ID, Sysadmin here

  l_outcome           BOOLEAN;
  l_timeout           NUMBER := 100;
  l_error_code        VARCHAR2(4000);
  l_error_explanation VARCHAR2(4000);

BEGIN
  fnd_global.apps_initialize (user_id           => l_user_id,
                               resp_id           => 51010,
                               resp_appl_id      => 553
                              );
                               fnd_profile.put (''AFLOG_LEVEL'', ''1'');
  l_iface_rec.last_update_date  := SYSDATE;
  l_iface_rec.last_updated_by   := l_user_id;
  l_iface_rec.creation_date     := SYSDATE;
  l_iface_rec.created_by        := l_user_id;
  l_iface_rec.last_update_login := -1;

  l_iface_lot_rec.last_update_date  := SYSDATE;
  l_iface_lot_rec.last_updated_by   := l_user_id;
  l_iface_lot_rec.creation_date     := SYSDATE;
  l_iface_lot_rec.created_by        := l_user_id;
  l_iface_lot_rec.last_update_login := -1;

  SELECT mtl_material_transactions_s.NEXTVAL INTO l_iface_rec.transaction_interface_id FROM dual;

  l_iface_rec.transaction_header_id := l_iface_rec.transaction_interface_id;
  l_iface_rec.transaction_mode      := 3;
  l_iface_rec.process_flag          := 1;
  l_iface_rec.transaction_type_id   := 35; --mtl_transaction_types
  l_iface_rec.transaction_source_id := 408953; --wip_entity_id
  l_iface_rec.wip_entity_type := 10;
  --  
  l_iface_rec.organization_id       := l_cur_mfg_org_id;
  l_iface_rec.inventory_item_id     := 623;
  l_iface_rec.subinventory_code     := ''Y02'';
  l_iface_rec.transaction_quantity  := -1;
  l_iface_rec.primary_quantity  := -1;
  l_iface_rec.transaction_uom       := ''个'';
  l_iface_rec.transaction_date      := SYSDATE ;
  l_iface_rec.source_code           := ''Test Only'';
  l_iface_rec.source_header_id      := 987654321;
  l_iface_rec.source_line_id        := 987654321;
  l_iface_rec.locator_id            := 3;
  INSERT INTO inv.mtl_transactions_interface VALUES l_iface_rec;

  l_iface_lot_rec.transaction_interface_id := l_iface_rec.transaction_interface_id;
  l_iface_lot_rec.lot_number               := ''201308-001'';
  l_iface_lot_rec.transaction_quantity     := l_iface_rec.transaction_quantity;
  l_iface_lot_rec.source_code              := l_iface_rec.source_code;
  l_iface_lot_rec.source_line_id           := l_iface_rec.source_line_id;

  INSERT INTO inv.mtl_transaction_lots_interface VALUES l_iface_lot_rec;

  l_timeout := 100; 
  l_outcome := mtl_online_transaction_pub.process_online(p_transaction_header_id => l_iface_rec.transaction_header_id,
                                                         p_timeout               => l_timeout,
                                                         p_error_code            => l_error_code,
                                                         p_error_explanation     => l_error_explanation);
  IF (l_outcome = FALSE) THEN
    dbms_output.put_line(''Failed to process the transaction'');
    dbms_output.put_line(''Error code: '' || l_error_code);
    dbms_output.put_line(''Error message: '' || l_error_explanation);
    DELETE inv.mtl_transactions_interface
     WHERE transaction_header_id = l_iface_rec.transaction_header_id;
    COMMIT;
  ELSE
    dbms_output.put_line(''Transaction with header id '' ||
                         to_char(l_iface_rec.transaction_header_id) ||
                         '' has been processed successfully'');
    COMMIT;  
  END IF;

END;

  

C# mysql 事务处理

C# mysql 事务处理

try
            {
                using (MySqlConnection conn = new MySqlConnection("Database=Database;Data Source=127.0.0.1;User Id=root;Password=123456;pooling=false;CharSet=utf8"))
                {
                    conn.Open();
                    MySqlTransaction transaction = conn.BeginTransaction();


                    MySqlCommand cmd = conn.CreateCommand();
                    cmd.Transaction = transaction;

                    try
                    {
                        cmd.CommandText = "INSERT INTO people(name,age,sex) VALUES(''张三'',''18'',''2'')";
                        int x = cmd.ExecuteNonQuery();
                        cmd.CommandText = "INSERT INTO address(address) VALUES(''ddddddd'')";
                        int y = cmd.ExecuteNonQuery();
                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            transaction.Rollback();
                        }
                        catch (Exception en)
                        {

                            throw;
                        }

                    }

                }
            }
            catch (Exception)
            {

                throw;
            }

 

Excel oracle add in 无法上传journal to oracle ebs: members not found error0cle

Excel oracle add in 无法上传journal to oracle ebs: members not found error0cle

如何解决Excel oracle add in 无法上传journal to oracle ebs: members not found error0cle

想要用于 oracle ADI 的 Excel O365 加载项,专门用于总帐日志上传,生成为 .xlsm 来自 一直显示未找到成员。

已经尝试降级和停止自动更新excel版本,但还是不行。

jdbc 事务处理

jdbc 事务处理

2007 - 08 - 08

jdbc 事务处理

在 JDBC 的数据库操作中,一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交 commit () 或是回退 rollback () 来结束事务的操作。关于事务操作的方法都位于接口 java.sql.Connection 中。

首先我们要注意,在 JDBC 中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作。操作成功后,系统将自动调用 commit () 来提交,否则将调用 rollback () 来回退。

其次,在 JDBC 中,可以通过调用 setAutoCommit (false) 来禁止自动提交。之后就可以把多个数据库操作的表达式作为 一个事务,在操作完成后调用 commit () 来进行整体提交。倘若其中一个表达式操作失败,都不会执行到 commit (),并且将产生响应的异常。此时就 可以在异常捕获时调用 rollback () 进行回退。这样做可以保持多次更新操作后,相关数据的一致性。示例代码如下:

java 代码
  1. try {   
  2.   
  3. conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;User=JavaDB;Password=javadb;DatabaseName=northwind);   
  4.   
  5. // 点禁止自动提交,设置回退   
  6.   
  7. conn.setAutoCommit(false);    
  8.   
  9. stmt = conn.createStatement();   
  10.   
  11. // 数据库更新操作 1   
  12.   
  13. stmt.executeUpdate(“update firsttable Set Name=''testTransaction'' Where ID = 1”);    
  14.   
  15. // 数据库更新操作 2   
  16.   
  17. stmt.executeUpdate(“insert into firsttable ID = 12,Name = ''testTransaction2''”);    
  18.   
  19. // 事务提交   
  20.   
  21. conn.commit();   
  22.   
  23. }   
  24.   
  25. catch(Exception ex) {    
  26.   
  27. ex.printStackTrace();   
  28.   
  29. try {   
  30.   
  31. // 操作不成功则回退   
  32.   
  33. conn.rollback();   
  34.   
  35. }   
  36.   
  37. catch(Exception e){   
  38.   
  39. e.printStackTrace();   
  40.   
  41. }   
  42.   
  43. }    

 

这样上面这段程序的执行,或者两个操作都成功,或者两个都不成功,读者可以自己修改第二个操作,使其失败,以此来检查事务处理的效果。我们在前面还提到了 JDBC 对事务所支持的隔离级别,下面将更详细进行讨论。

 

JDBC API 支持事务对数据库的加锁,并且提供了 5 种操作支持,2 种加锁密度。

5 种加锁支持为:

static int TRANSACTION_NONE = 0;

static int TRANSACTION_READ_UNCOMMITTED = 1;

static int TRANSACTION_READ_COMMITTED = 2;

static int TRANSACTION_REPEATABLE_READ = 4;

static int TRANSACTION_SERIALIZABLE = 8;

具体的说明见表 4-2。

2 种加锁密度:

最后一项为表加锁,其余 3~4 项为行加锁。

“脏” 数据读写 (Dirty Reads):当一个事务修改了某一数据行的值而未提交时,另一事务读取了此行值。倘若前一事务发生了回退,则后一事务将得到一个无效的值 (“脏” 数据)。

重复读写 (Repeatable Reads):当一个事务在读取某一数据行时,另一事务同时在修改此数据行。则前一事务在重复读取此行时将得到一个不一致的值。

错误 (映像) 读写 (Phantom Reads):当一个事务在某一表中进行数据查询时,另一事务恰好插入了满足了查询条件的数据行。则前一事务在重复读取满足条件的值时,将得到一个额外的 “影像” 值。JDBC 根据数据库提供的默认值来设置事务支持及其加锁,当然,也可以手工设置:

setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);

可以查看数据库的当前设置:

getTransactionIsolation ()

需要注意的是,在进行手动设置时,数据库及其驱动程序必须得支持相应的事务操作操作才行。

上述设置随着值的增加,其事务的独立性增加,更能有效地防止事务操作之间的冲突,同时也增加了加锁的开销,降低了用户之间访问数据库的 并发性,程序的运行效率也会随之降低。因此得平衡程序运行效率和数据一致性之间的冲突。一般来说,对于只涉及到数据库的查询操作时,可以采用 TRANSACTION_READ_UNCOMMITTED 方式;对于数据查询远多于更新的操作,可以采用 TRANSACTION_READ_COMMITTED 方式;对于更新操作较多的,可以采用 TRANSACTION_REPEATABLE_READ;在 数据一致性要求更高的场合再考虑最后一项,由于涉及到表加锁,因此会对程序运行效率产生较大的影响。

另外,在 Oracle 中数据库驱动对事务处理的默认值是 TRANSACTION_NONE,即不支持事务操作,所以需要在程序中手动进行设置。总之,JDBC 提供的对数据库事务操作的支持是比较完整的,通过事务操作可以提高程序的运行效率,保持数据的一致性。

4.8.4 分布式事务处理

在本节大部分篇幅中,我们一直讨论的事务一直是仅仅涉及单个数据库相连的单条连接,下面对分布式事务进行简单的介绍。

事务处理是对某种服务的请求,而且是否接受或拒绝这种请求将即时答复请求者。在请求和响应之间,资源 (如文件、数据库等) 将根据需要阅 读和更新。从事务处理的发展历史来看,大致经历了一个从集中处理到分布式处理的演进过程。这一转变主要的动力是伴随着 Internet 的兴起,客户对于更 快、更安全的事务处理的客观需求和面向对象的应用所提供的技术实现的可能性。

在 Internet 环境下,分布式事务处理为了满足日益巨大的业务吞吐量所带来的挑战,其功能必须进一步拓展,必须支持分散应用组件之 间的互操作性,而这必须采用分布式事务处理管理器。这是有别于传统的集中式事务处理的最鲜明的特点。指定一个事务叫做事务界定 (demarcation),通过把分布式的构件绑定到一个全局事务上来完成事务界定工作,它是标记构成一个事务的一组操作的一种方法。

最常用的界定的途径是为事务处理标记执行操作的线程,这叫做编程界定。这样建立的事务可以通过去除标记而被挂起,并在以后通过从挂起点 向恢复点显式地传递事务上下文来恢复执行。 事务界定在向事务管理器的一个提交或一个回退请求之后结束,提交请求指导所有参与的资源管理器永久的记录事务中的操作的效果,回退请求使资源管理器撤消事 务中所有操作的效果。

一个可替代编程界定的是声明界定。基于构件的事务处理系统如 Microsoft 事务服务器,以及基于应用服务器的事务处理系统如企业 Java Beans 规范支持声明界定。在这种技术中,构件在部署时被标记为事务性的。这暗示了两件事。首先,界定的职责从应用转移到了容纳构件的容器 (Container)。为此,这种技术也叫做管理容器界定。其次,界定从应用建造期间 (静态) 延期到构件部署期间 (动态)。

因为多个应用构件和资源参与了一个事务,对于事务管理器建立和维护发生的事务的状态是必须的。这通常以事务上下文的形式完成。 事务上下文是在资源上的事务性操作和调用操作的构件之间的一个关联 (Association)。在一个事务执行期间,所有的参与事务的线程共享事务上下 文。所以事务上下文在逻辑上封装 (Envelop) 了在一个事务期间在事务性资源上的完成的所有操作。事务上下文通常由底层的事务管理器透明的维护。讨论 分布式事务的细节已经超出本书的范围,这里的目的是给大家一些思路和概念。下面分别介绍一下关于分布式事务处理的技术模型:

1. X/Open 分布式事务处理模型

X/Open 分布式事务处理 (DTP) 模型是 Open Group 提出的一个分布式处理模型,Open Group 是一个厂商财团。这个模型是在事务处理和数据库领域中多数商业厂商间的一个标准。这个模型由四个构件组成:

(1) 应用程序:实现事务性操作

(2) 资源管理器:同于上面的讨论

(3) 事务管理器:同于上面的讨论

(4) 通信资源管理器:方便在不同的事务处理领域中的不同的事务管理器之间的互操作

X/Open DTP 模型在产业界中被确立的。一些商业事务管理产品,像 TXSeries/Encina (完全附属于 IBM 的 Tranarc 的产品),Tuxedo 和 TopEnd (BEA Systems 的产品),还有 AT&T GIS 支持 TX 接口。尽管 Microsoft 的 Transaction Server 不支持 TX 接口,它还是能够同像 Oracle 这样的遵从 XA 的数据库互操作。类似的,多数商业数据库像 Oracle,Sybase,Informix 和 Microsoft SQL Server,以及消息中间件产品如 IBM 的 MQSeries,和 Microsoft 的 MSMQ Server 提供了 XA 接口的一个实现。

2. OMG 对象事务服务

对象事务服务 (OTS) 是由对象管理组织 (OMG) 规定的分布式事务处理服务。这个规范扩展了 CORBA 模型并定义了一系列跨越 (across) 多个 CORBA 对象完成事务处理的接口。OTS 模型基于 X/Open DTP 模型之上并提供增强,如 OTS 模型把函数形式的 XA 和 TX 接口替换成了 CORBA IDL 接口,在这个模型中的各种对象通过在 IIOP 之上的 CORBA 方法调用来通信。

OTS 体系由下列构件组成:

事务客户:一个调用事务性对象上的操作的程序或对象。

事务性对象:一个封装 (encapsulate) 或参照 (refers to) 持久数据的 CORBA 对象,并且它的行为依赖于在一个事务期间是否调用它的操作。

可恢复对象:一个直接维护持久数据并且参与事务协议的事务性对象。

事务性服务器:一个或多个事务性对象的集合 (collection)。

可恢复服务器:一个对象的集合,其中至少有一个是可恢复的。

资源对象:一个资源对象是为了参与两阶段提交和恢复协议而被注册的、在事务服务中的一个对象。

 

JDBC(6)事务处理&批量处理

JDBC(6)事务处理&批量处理

事务处理就是当执行多个SQL指令,因某个指令有误,则取消执行所有的命令

它的作用是保证各项的完整性和一致性

 

JDBC的数据操作时

commit():提交事务

rollback():回退事务

绝位于java.sql.Connection接口类中

 

JDBC中的事务操作时默认提交的

可用setAutoCommit(false)来禁止自动提交

 

Java API中的JDBC事务是通过Connection对象进行控制的

提供了两种方式:自动提交模式&手动提交模式

默认是自动提交模式

 

事务处理:

public void updata1(Connection conn,String sql){
        Statement statement = null;
        try {
            conn = getConnection();
            statement = (Statement) conn.createStatement();
            statement.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            JdbcTools.Close(null, statement, null);
        }
    }
    @Test
    public void test() {
        Connection conn = null;
        
        try {
            conn = JdbcTools.getConnection();
            //开始事物,取消默认提交
            conn.setAutoCommit(false);
            String sql = "update student set ssclass-100 where id = 17";
            updata1(conn, sql);
            
            int i = 10 / 0;
            System.out.println(i);
            
            sql = "update student set ssclass-100 where id = 18";
            updata1(conn, sql);
            
            //提交事物
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //如出现异常,回滚事物
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }finally{
            Close(null, null, conn);
        }

 分析代码:很明显可以看到,代码中出现int i= 10 / 0;在进行打印,此时出错了

此时不会因为一个错误而导致之前的操作失败,上一个插入语句可以成功执行

 以上对事务的简单解读

 

测试事物的级别:

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED 
Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ
@Test
    public void JiBie(){
        Connection conn = null;
           
        try {
            conn = JdbcTools.getConnection();
            //开始事物,取消默认提交
            conn.setAutoCommit(false);
            String sql = "update student set ssclass-100 where id = 17";
            Level(sql);
        
            //提交事物
            conn.commit();
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            Close(null, null, conn);
        }
    }

public void Level(String sql){ Connection conn = null; Statement statement = null; try { conn = getConnection(); //设置级别 conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); statement = (Statement) conn.createStatement(); statement.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ Close(null, statement, conn); } }

 

批量处理:

批量对数据库进行大量的操作
PreparedStatement
    @Test
    public void testPiLiangPreparedStatement() {
        Connection conn = null;
        PreparedStatement preparedstatement = null;
        String sql = null;
        try {
            conn = getConnection();
            conn.setAutoCommit(false);
            sql = "insert into student(sname,sclass) values(?,?)";
            preparedstatement = (PreparedStatement) conn.prepareStatement(sql);
            // 开始时间
            long begin = System.currentTimeMillis();
            for (int i = 0; i < 10; i++) {
                preparedstatement.setString(1, "name" + i);
                preparedstatement.setInt(2, 1234 + i);
                preparedstatement.executeUpdate();
                
                //对时间进行大度的优化
                //积攒
                preparedstatement.addBatch();
                //当积攒到一定的成都自动进行清空
                if(( i + 1) % 300 == 0){
                    preparedstatement.executeBatch();
                    preparedstatement.clearBatch();
                }
            }
            //若总条数不再是批量的整数倍,还需要再次进行清理
            if(10 % 300 != 0){
                preparedstatement.executeBatch();
                preparedstatement.clearBatch();
            }
             // 结束时间
            long end = System.currentTimeMillis();
            System.out.println(end - begin);
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
            conn.rollback();
        } finally {
            Close(null, preparedstatement, conn);
        }
    }
Statement
// 批量对数据库进行大量的操作
    // Statement
    @Test
    public void testPiLiangStatement() {
        Connection conn = null;
        Statement statement = null;
        String sql = null;
        try {
            conn =getConnection();
            conn.setAutoCommit(false);
            statement = (Statement) conn.createStatement();
            // 开始时间
            long begin = System.currentTimeMillis();
            for (int i = 0; i < 10; i++) {
                sql = "insert into student(sname,sclass) values(''" + 123 + " '',''" + (i + 1) + "'')";
                statement.executeUpdate(sql);
            }
            // 结束时间
            long end = System.currentTimeMillis();
            System.out.println(end - begin);
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
            conn.rollback();
        } finally {
            Close(null, statement, conn);
        }
    }

 

 

 两者在插入相同的数据量之后,进行时间的对比

 PreparedStatement显然比Statement执行的速度快

 

关于Oracle EBS OPM 事务处理oracle事物的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于C# mysql 事务处理、Excel oracle add in 无法上传journal to oracle ebs: members not found error0cle、jdbc 事务处理、JDBC(6)事务处理&批量处理的相关知识,请在本站寻找。

本文标签: