문제

현재 삽입물의 자동 증분 ID를 검색하는 매끄러운 / PLANSQL 네이티브 솔루션이 없습니까?

사용자 ID는 MySQL 테이블의 자동 증분 필드입니다.

sql"""
   INSERT INTO `table`(`email`) 
   OUTPUT INSERTED.userId 
   VALUES ("theEmailAdress@test.de")
""".as[Int].firstOption
.

도움이 크게 감사 할 것입니다.

환호 올리버

도움이 되었습니까?

해결책 2

고맙습니다. Cvogt 이 토론에서 돕기 위해 slick의 plainsql 쿼리 .

마침내 누락 된 기본 기능을 다음과 같이 대체 할 작업을 발견했습니다.

동일한 세션 내에서 나는 두 개의 쿼리를 해결합니다. 첫 번째 것은 INSERT 문이며, 두 번째 명령문은 최근 실행 된 SELECT LAST_INSERT_ID() (1)에 의해 AUTO_INCREMENT 열에 대해 설정된 최신 자동 생성 값을 반환하는 INSERT입니다. 자세한 내용 : mysql 참조 - last_insert_id ()

Database.forDataSource(dataSource).withDynSession {
  sqlu"""INSERT INTO `users`(`email`) VALUES ("theEmailAdress@test.de")
  """.firstOption match {
    case Some(num) if num == 1 => sql"SELECT LAST_INSERT_ID()".as[Long].firstOption()
    case None => None
  }
}
.

이것은 지금 저를 위해 일합니다. 개선 사항이 있으면 솔루션을 게시하는 것을 망설이지 마십시오.

다른 팁

는 데이터베이스에 따라 다릅니다.

MS SQL의 SCOPE_IDENTITY (), MySQL은 last_insert_id ()입니다. 위의 것도 아닌 경우 DB에 해당하는 것을 시도해보십시오.

cvogt 에 의해 추가 :

현재 PLANE SQL에 대한 슬릭 내장 기능이 없으며 Slick의 sql"..." 보간 또는 StaticQuery를 사용할 때 기본 JDBC 문에 액세스 할 수있는 방법이 없습니다. 이는 getGeneratedKeys에 액세스 할 수 있습니다. 아마도 SQL Interpolator Statementinvoker 이를 허용합니다. 그들은 단지 150 LOC입니다. 어쩌면 샷을주고 홍보를 제출할 가치가있을 것입니다.

withPreparedInsertStatement와 메소드와 세션 < a> 메소드 > JDBC 연결 메소드는 JDBC 문을 사용하여 작동합니다. "nofollow"> https://github.com/slick/slick/pull을 다음에 대한 문서를 추가하기 위해 PR을 만들었습니다. / 691

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top