在不提交的情况下,在第二个存储过程中读取第一个执行的存储过程插入的数据?

时间:2019-05-13 23:26:45

标签: java oracle stored-procedures jdbc

我有一个java这样的业务: 1-Call存储过程SP_INSERTS:插入数据而不提交 2-调用Web服务:检索数据以进行下一步调用。 3-调用存储过程SP_UPDATES:更新在第一步中创建的数据。 4-提交或回滚,如果一切正常或不正常。

我遇到的问题是,在第三步中,存储过程没有找到第一步中插入的数据(找不到数据),只有在第二步之后我才可以找到数据。你知道我能做什么吗?有提示吗?

2 个答案:

答案 0 :(得分:1)

我不是Java专家,但是只要所有这些工作都在同一笔交易中完成,您就应该很好。我认为默认情况下,JDBC驱动器处于自动提交模式,因此每个语句在完成后都会提交。您可以使用以下方式更改此行为:

import React from "react";
import styles from "./KanbanCard.module.css";

/*
 * The Kanban Board Card component
 */
class KanbanCard extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            collapsed: true,
            index: {
                name: this.name,
                description: this.description,
                project_stage: this.project_stage
            },
        };
    }



    render() {



        return (
                <div
                    className="card text-white bg-secondary mb-3"
                    draggable={true}
                    onDragEnd={(e) => {this.props.onDragEnd(e, this.props.project);}}

                >

                    <div className="card-header"><h4>{this.props.project.name}</h4></div>
                        <div className="card-body text-white">
                            <div className="card-title"><strong>Description: </strong></div>
                            {(this.state.collapsed)
                                ? null
                                : (<div className="card-text">{ this.props.project.description }<br/></div>)
                            }
                            <div
                                style={{'width': '100%'}}
                                onClick={(e) => {this.setState({collapsed: !this.state.collapsed});}}
                            >
                                {(this.state.collapsed) ? String.fromCharCode('8757') : String.fromCharCode('8756')}
                            </div>
                        </div>
                        <div className="card-footer" >
                         <div>
                    <button 
                            className="btn btn-dark" onClick={(e) => {this.props.removeCard(this.props.index);}}>Delete

                    </button>
                    </div>
                    </div> 
                </div>
            )
        }



}

export default KanbanCard;

这要求所有这些步骤都由同一连接完成,因此,如果您使用某种类型的连接池,则可能无法正常工作。

请参阅:https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#disable_auto_commit

答案 1 :(得分:-4)

source link  请在提供的链接中找到类似的情况,如它所描述的..您可以在您的过程中插入和更新您的程序,并根据需要进行操作,但是您不想这样做。.因此简而言之解决方案:进行插入和更新在一个过程中按顺序执行,并且您之间的逻辑作为过程使用 autonomous_transaction oracle关键字不影响 插入或更新语句。