Helios co.
Lt. Commander
- Registriert
- März 2005
- Beiträge
- 1.863
Hallo @all,
ich migriere gerade eine größere Anwendung die in Java geschrieben ist und als Db mysql verwendet. Das ganze soll nun nach Oracle migriert werden.
Die Persistenz übernimmt iBatis. Ich muss an dieser Stelle direkt anmerken, dass ich mich nicht mit iBatis gut auskenne.
Das größte Problem stellt bei der Migration die LIMIT Funktion von MySQL dar.
Beispielsweise sei die folgende Query gegeben:
Ich habe bereits viele varianten ausprobiert diese Query zu migrieren, leider bis jetzt stets ohne Erfolg, wobei die Ursache für das Versagen bei iBatis zu finden ist.
1. Ich kann die Queriy nicht mittels PLSQL migrieren
2. Es klappt auch nicht die Query mittels ROWNUMBER zu migrieren, zumindest nichz ohne Weiteres. Denn scheinbar gibt es Probleme mit den Inline Parametern #limit# und #offset#.
Relevant ist die folegdne Zeile:
Dieser Ansatz geht nicht, und ich kriege einen Inline Parameter Fehler.
Folgendes geht:
liefert aber natürlich natürlich nicht das Verhalten, das es soll!
Da scheinbar iBatis Probleme mit der Addition von Parametern hat, habe ich einen sehr primitiven Ansatz implementiert:
Dabei enthält die Tabelle mylimit2 mappings, der Art
Aber auch das klappt nicht, wobei mir nicht klar ist warum. Ohne iBatis klappt diese Query einwandfrei, also muss ich davon ausgehen, dass hier ein Problem mit den Parametern vorliegen, bzw. mit deren Verwendung.
Unter mySQL funktioniert natürlich alles (also die Originalquery) korrekt!
Wie gesagt, ich habe nur wenig Ahnung von iBatis, daher die Frage: Kann mir jemand wenisgetns erklären warum das so nicht funktioniert?
Bin wirklich dankbar für jeden Rat!
ich migriere gerade eine größere Anwendung die in Java geschrieben ist und als Db mysql verwendet. Das ganze soll nun nach Oracle migriert werden.
Die Persistenz übernimmt iBatis. Ich muss an dieser Stelle direkt anmerken, dass ich mich nicht mit iBatis gut auskenne.
Das größte Problem stellt bei der Migration die LIMIT Funktion von MySQL dar.
Beispielsweise sei die folgende Query gegeben:
Code:
<select id="getPendingUserByActivationCode" resultMap="UserCommon.userWithActivationCode" parameterClass="userParam">
SELECT <include refid="commonUserAttributes"/>, activation_code
FROM pendingUser
LEFT JOIN ldapUser USING (user_name)
WHERE spammer = 0
AND activation_code = #rawSearch#
LIMIT #limit# OFFSET #offset#
</select>
Ich habe bereits viele varianten ausprobiert diese Query zu migrieren, leider bis jetzt stets ohne Erfolg, wobei die Ursache für das Versagen bei iBatis zu finden ist.
1. Ich kann die Queriy nicht mittels PLSQL migrieren
2. Es klappt auch nicht die Query mittels ROWNUMBER zu migrieren, zumindest nichz ohne Weiteres. Denn scheinbar gibt es Probleme mit den Inline Parametern #limit# und #offset#.
Code:
<select id="getPendingUserByActivationCode" resultMap="UserCommon.userWithActivationCode" parameterClass="userParam">
SELECT user_name, user_email, user_homepage, user_realname, user_password,
api_key, birthday, gender, hobbies, interests, ip_address, openurl, place, profession,
reg_date, spammer, role_, updated_by, updated_at, to_classify, tmp_password, tmp_request_date,
ldapUserId, lastAccess, activation_code
FROM
(SELECT t.*, ROWNUM r
FROM
(SELECT <include refid="commonUserAttributes"/>, activation_code
FROM pendingUser
LEFT JOIN ldapUser USING (user_name)
WHERE spammer = 0
AND activation_code = #rawSearch#) t
WHERE ROWNUM < (#limit# + #offset#))
WHERE r > #offset#
</select>
Relevant ist die folegdne Zeile:
Code:
WHERE ROWNUM < (#limit# + #offset#)
Dieser Ansatz geht nicht, und ich kriege einen Inline Parameter Fehler.
Folgendes geht:
Code:
WHERE ROWNUM < (#limit#)
Da scheinbar iBatis Probleme mit der Addition von Parametern hat, habe ich einen sehr primitiven Ansatz implementiert:
Code:
WHERE ROWNUM < (select wert from mylimit2 where limit = #limit# and offset = #offset#))
Dabei enthält die Tabelle mylimit2 mappings, der Art
Code:
offset | limit | wert (= limit+offset)
Aber auch das klappt nicht, wobei mir nicht klar ist warum. Ohne iBatis klappt diese Query einwandfrei, also muss ich davon ausgehen, dass hier ein Problem mit den Parametern vorliegen, bzw. mit deren Verwendung.
Unter mySQL funktioniert natürlich alles (also die Originalquery) korrekt!
Wie gesagt, ich habe nur wenig Ahnung von iBatis, daher die Frage: Kann mir jemand wenisgetns erklären warum das so nicht funktioniert?
Bin wirklich dankbar für jeden Rat!
Zuletzt bearbeitet: