2015-05-04 128 views
1

我想使用的MyBatis从我的Oracle数据库10g调用序列号,但我只得到一个错误信息如下所示:如何使用MyBatis调用Oracle数据库序列号?

ORA-02289: Sequence is not available. 

我怎么能说一个序列号从Oracle数据库?

下面是关于当前的MyBatis版本我的Maven项目相关性:

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

这里是我的道Java类:

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

这里是我的XML声明:

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

想必运行从序列的选择完全在登录到数据库,Java已登录的同一用户什么时候? – ninesided

+0

'SELECT mySeq.nextval FROM dual' change to'SELECT nextVal('mySeq')' –

+0

@Afsun Khammadli:在您的解决方案中,我收到错误ORA-00904:“NEXTVAL”:无效标识符 – Marwief

回答

0

我想你使用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 nextVal('mySeq')您可以使用此SELECT mySeq.nextVal from dual

+0

现在我得到此错误:java.lang.IllegalArgumentException:映射的语句集合不包含myClass的值 – Marwief

+0

您必须更改您的表格结构的参数。 –

+0

对不起,但我不知道,这里改变了什么: SELECT nextVal('mySeq') INSERT INTO $ {mySchema} .myTable(id,loggingtime)VALUES(#{myId},sysdate) Marwief

相关问题