Slick / Oracle PLAIN SQL插入后获取自动生成的ID

凡妮莎

我正在尝试通过Scala中的Slick运行查询,该查询会将一条记录插入Oracle数据库,并返回自动生成的ID作为结果。我看到使用Slick的语法可以做到这一点,但是使用普通的SQL查询可以实现吗?使用下面的代码,我只能得到-1的返回值。

val name = "Bob"
db.run(sql"""DECLARE NEW_PERSON_ID; 
             BEGIN 
               INSERT INTO TB_PEOPLE (ID, NAME)
               VALUES(SEQ_PEOPLE.NEXTVAL, $name) 
               RETURNING ID INTO NEW_PERSON_ID;
             END;""".as[Int])
凡妮莎

Slick似乎不支持输出参数,因此使用Oracle的返回语法无效。我发现一种解决方法是先生成一个ID,然后使用该ID进行插入(需要2个查询)。查询被包装在事务中。

val name = "Bob"
val action = for {
    newPersonId <- sql"""SELECT SEQ_PEOPLE.NEXTVAL FROM DUAL""".as[Int]
    _ <- sqlu"""INSERT INTO TB_PEOPLE (ID, NAME) VALUES ($newPersonId, $name)"""
}
db.run(action.transactionally)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章