iBatis setzen des Temporären Tabellennamen in MyBatis/iBatis?

JayGabriel

Aktives Mitglied
Hallo,

ich hoffe, mir kann einer von euch hier weiter helfen.

In der Abfolge einer Berechnung wird bei mir im System eine temporäre Tabelle erzeugt. Die bekommt bei mir eine Nummernkennung ans Ende angehängt, die während der Laufzeit ermittelt wird. Also im Sinne von "TMP_TabelleSoundSo987278".
Jetzt versuch ich diese TMP Tabelle mit MyBatis auszulesen und schließlich kommt hier die Fehlermeldung:

Code:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: java.sql.SQLException: Die Variable '@P0' muss deklariert werden.

Mein Select:
Code:
SELECT FELD1, FELD2, FELD3, FELD4
FROM #{tmptable}

Meinen temporären Tabellennamen übergeb ich natürlich per Übergabeparameter in dem der vollständige Tabellenname zusammengebaut wurde.
Wenn ich das Select explizit mit einer festgesetzten Nummer angebe (ohne Übergabeparameter) funktioniert es. Aber die Nummern weiß ich ja leider nicht vorneweg.

Kann man womöglich mit MyBatis gar keine temporären Tabellen ansteuern? Oder hab ich einfach einen Denkfehler?

Viele Grüße,
Jay
 

turtle

Top Contributor
Versuch mal
SQL:
  SELECT FELD1, FELD2, FELD3, FELD4
	FROM ${tmptable}
myBATIS unterscheidet, ob Parameter-Werte oder der SQL-Befehl als solches geändert werden soll.
 

JayGabriel

Aktives Mitglied
Vielen Dank! :)

So hat es nun geklappt.

Nachdem ich
Code:
FROM ${tablename}
geschrieben hatte, kam zwar ein neuer Fehler:

Code:
There is no getter for property named 'tablename' in 'class java.lang.String'

Aber den habe ich dadurch beseitigen können, dass ich der Funktion einfach einen komplexen Datentypen mit dem Tabellennamen als Attribut übergeben habe.

Viele Grüße,
Jay
 

turtle

Top Contributor
Freut mich das es klappt.

Ja, Du kannst ein POJO machen, um den Tabellennamen zu übergeben.

Aber primitive Datentypen (int, long, double, String) kann man einfacher übergeben, indem man das als Parametertyp angibt und dann ist jeder Parametername egal; ich nehme dann immer {value}

<select id="WasAuchImmer" parameterType="String">
select * from $(tempTableName}
</select>
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben