세 개의 테이블 (team, player, team_player)이 있다고 가정 해 보겠습니다. 표 team_player는 "다 대다"관계를 허용하는 브리지 테이블입니다.트랜잭션 내 삽입 후 ID 가져 오기 (Oracle)
누군가 새로운 팀을 만들고 싶을 때, 팀에 초기 플레이어를 지정합니다.
동일한 트랜잭션에 team 및 team_player 행을 모두 삽입하려면 어떻게해야합니까? 즉, 새 팀 행에 커밋하기 전에 모든 team_player 레코드를 삽입하고 싶습니다. JDBC와 Oracle을 사용하고 있습니다.
아래 코드를 시도해도 teamIid가 숫자 (트리거에 의해 증가됨)인데도 teamId는 문자열로 채워집니다. 그래서, 이것은 제가 삽입하려고했던 레코드의 id가 아닌 것 같습니다. (아직 커밋하지 않았습니다.) 나는 RETURN_GENERATED_KEYS에 대해 읽어 경우
c = DB.getConnection();
c.setAutoCommit(false);
sql = "INSERT INTO team (name) values (?)";
myInsert = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
myInsert.setString(1, "cougars");
int affectedRows = memoInsert.executeUpdate();
String teamId;
ResultSet generatedKeys = myInsert.getGeneratedKeys();
if (generatedKeys.next()) {
teamId = generatedKeys.getString(1);
}
// ...loop through players inserting each player and team.id into team_player
// c.commit();
이입니다 How to get the insert ID in JDBC?
오라클은 시퀀스를 가지고있다. 이런 상황에서 잘 작동합니다. –