【问题标题】:How to call a Oracle database sequence number by using MyBatis?如何使用 MyBatis 调用 Oracle 数据库序列号?
【发布时间】:2015-05-04 09:31:09
【问题描述】:

我想使用 MyBatis 从我的 Oracle 数据库 10g 中调用一个序列号,但我只收到如下错误消息:

ORA-02289: Sequence is not available.

如何从 Oracle 数据库中调用序列号?

这是我关于当前 MyBatis 版本的 Maven 项目依赖:

<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis-spring</artifactId>
   <version>1.1.1</version>
</dependency>

这是我的 Dao Java 类:

long mySeqNumber = myDaoClass.getNewNumber(); // here I get an exception

这是我的 xml 声明:

<select id="getNewNumber" resultType="java.lang.Long" >
    SELECT mySeq.nextval
    FROM dual
</select>

【问题讨论】:

  • 当以与 Java 登录相同的用户身份登录数据库时,大概运行从序列中选择的工作完美?
  • SELECT mySeq.nextval FROM dual 改为SELECT nextVal('mySeq')
  • @Afsun Khammadli:使用您的解决方案,我收到错误 ORA-00904: "NEXTVAL": invalid identifier
  • 你将使用序列 nextval 做什么?我想你会使用插入不是吗?
  • 是的,对于 SQL 插入,但首先我需要获取下一个序列号,然后我将序列号作为参数放入 XML 插入语句中

标签: java oracle mybatis


【解决方案1】:

我认为您使用 nextval 进行插入。请尝试以下操作:

<insert id="insertPerson" parameterType="Person" useGeneratedKeys="true"> 
  <selectKey keyProperty="personId" resultType="int" order="BEFORE">
    SELECT nextVal('mySeq')
  </selectKey>
  INSERT INTO person (personId,PersonName) VALUES (#{personId},#{personName}) 
</insert>

你也可以使用SELECT mySeq.nextVal from dual代替SELECT nextVal('mySeq')

【讨论】:

  • 现在我得到这个错误:java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for myClass
  • 您必须更改表结构的参数。
  • 对不起,我不知道,这里必须改变什么: SELECT nextVal('mySeq') INSERT INTO ${mySchema}.myTable (id, loggingtime) VALUES(#{myId}, sysdate) 跨度>
  • 我觉得我的回答是对的。你的代码可能有问题。请将sysdate改为sysdate()
  • 没有 sysdate 不是问题。问题出在我的源代码中的其他任何地方,但我找不到错误
【解决方案2】:

我能够做到这一点,

<dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency> 



<select id="getUploadId" resultType="int">
    select {schema}.SEQUENCE_NAME.NEXTVAL from dual
</select>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 2015-10-01
    • 2014-08-01
    • 2013-03-18
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多