2013-06-11 2 views
5

삽입시 동일한 테이블에 2 개의 다른 ID를 채울 필요가 있으며 selectKey를 사용하여 Oracle 시퀀스에서 값을 가져 와서 ID를 채우려고합니다.같은 삽입 쿼리에 하나 이상의 selectKey 절을 포함 할 수 있습니까?

하나의 id와 selectKey에는 아무런 문제가 없지만 두 번째 selectKey를 추가 할 때 값이 채워지지 않는 것 같습니다 (아래의 절 참조).

가능합니까? 또는 두 번째 ID를 업데이트하기 위해 다른 쿼리를 만들어야합니까?

감사

<insert id="create" parameterClass="MyObject"> 
<selectKey keyProperty="id" resultClass="long" type="pre"> 
    <include refid="sequences.myObjectId" /> 
</selectKey> 
<selectKey keyProperty="mySecondId" resultClass="long" type="pre"> 
    <include refid="sequences.mySecondId" /> 
</selectKey>  
INSERT INTO MY_OBJECT_TABLE 
(
MY_OBJECT_ID, 
MY_SECOND_ID, 
... 
) 
VALUES 
) 
#id#, 
#mySecondId#, 
... 
) 
</insert> 

답변

3

은 ONLY ONE있을 수 있습니다!

결국 나는 ibatis 삽입 스탠자에 단 하나의 절만있을 수 있음을 발견했습니다.

<insert id="create" parameterClass="MyObject"> 
<selectKey keyProperty="id" resultClass="long" type="pre"> 
    <include refid="sequences.myObjectId" /> 
</selectKey> 
INSERT INTO MY_OBJECT_TABLE 
(
MY_OBJECT_ID, 
MY_SECOND_ID, 
... 
) 
VALUES 
) 
#id#, 
MY_SECOND_ID_SEQUENCE.nextval, 
... 
) 
</insert> 

MY_SECOND_ID_SEQUENCE 내가 이전에 정의 된 오라클 시퀀스 이름입니다

그러나 나는 다음과 같이 두 번째 키를 업데이트 할 수 있었다 (나는이 특정 오라클 믿는다).

+0

나는 내 자신의 거래에 대답하는 것을 좋아하지 않지만 결국 다른 곳에서 대답을 찾았습니다. 바라기를 이것은 미래에 다른 사람을 도울 것입니다. –

+0

MS SQL을 사용하고 있는데 비슷한 요구 사항이 있습니다. 이제 ** sequence에서 ** MY_SECOND_ID **를 가져 오는 대신 다른 테이블에서 가져와야합니다. 시퀀스 대신 선택 쿼리를 사용할 수 있습니까? –

+1

MS SQL을 사용했지만 이후 MY_SECOND_ID_SEQUENCE.nextval 대신 (SELECT ID FROM yourQuery)을 추가 한 지 오래 되었습니까? –