ORA-00911: Ungültiges Zeichen

naeko

Mitglied
Hallo,
ich versuche aus einer Java-Applikation ein ganz normales SQL-Statement auf Oracle-DB auszuführen und zwar:

public ResultSet getCountries(Connection connection)
{
ResultSet res = null;
//mein SQL-Statement:
String sql = "SELECT * FROM Regionen ORDER BY "+Country.COLUMN_REGIONSID+" ASC;";

try {
res = getResult(connection, sql);
}
catch (SQLException e) {
//ICH LANDE IMMER HIER
System.out.println("Error on execute sql statement. " + e);
}
return res;
}

private ResultSet getResult(Connection connection, String sql) throws SQLException
{
ResultSet res = null;

if (connection != null)
{
Statement statement = connection.createStatement();

if (statement.execute(sql)) //GENAU HIER KRACHTS
{
res = statement.executeQuery(sql);
}
}
else
throw new SQLException("No Database connection available!");

return res;
}
in der catch-Anweisung von getCountries() lande ich immer mit der Fehlermeldung:
Error on execute sql statement. java.sql.SQLException: ORA-00911: Ungültiges Zeichen
Das SQL-Statement an sich ist richtig (habe den im Oracle SQL Developer getestet und richtige Ergebnismenge bekommen)
Kann mir da jemand auf meinen Fehler hinweisen?
Danke
 
Lass mal das ";" Semikolon am Ende deines Strings weg.
Code:
String sql = "SELECT * FROM Regionen ORDER BY "+Country.COLUMN_REGIONSID+" ASC";
 
super.......danke:)
weiß jemand wie ich ein Feld in Oracle anlegen kann um
a) vierstelliges Jahr angezeigt zu bekommen (bei mir ist es beim Type:Date immer 2-stellig)
b) eine Zahl mit 2 Nachkommastellen (kann ich da schlichtes Number nehmen?)
Danke
 
a) vierstelliges Jahr angezeigt zu bekommen (bei mir ist es beim Typeate immer 2-stellig)
Oracle hat immer ein 4-stelliges Jahr im Datentyp DATE. Die Darstellung ist eine reine Konfigurationssache der Umgebung. Du kannst mit folgendem Befehl festlegen wie ein Datum standardmässig als Text dargestellt werden soll:

SQL:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY HH24:MI:SS';
Session wurde geõndert.

SQL> select sysdate from dual;

SYSDATE
-------------------
15.12.2006 10:53:11

1 Zeile wurde ausgewõhlt.

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YY HH24:MI';

Session wurde geõndert.

SQL> select sysdate from dual;

SYSDATE
--------------
12/15/06 10:54

1 Zeile wurde ausgewõhlt.

b) eine Zahl mit 2 Nachkommastellen (kann ich da schlichtes Number nehmen?)
Ein NUMBER geht natürlich, ist aber etwas überdimensioniert. Je genauer du angibst, welche Größe und Präzision ( NKSt ) du erwartest, desto besser.

Also:
NUMBER( 12, 2 ) ist eine Zahl mit insg. 12 Ziffern, davon 10 Vorkomma und 2 Nachkomma
 
Zuletzt bearbeitet von einem Moderator:
allerdings sind die Angaben zu precision und scale bei einer NUMBER-Spalte nur als Constraints zu verstehen: ein NUMBER(12,2) Feld kann also nur insgesamt 12 Stellen beinhalten, von denen 2 Nachkommastellen sind. Auf den erforderlichen Speicherplatzbedarf hat die Wahl von NUMBER oder NUMBER(12,2) aber keinen Einfluss:

SQL:
SQL> create table test(a number, b number(12,2));

Tabelle wurde erstellt.

SQL> insert into test values (9999999999.99, 9999999999.99);

1 Zeile wurde erstellt.

SQL> select vsize(a), vsize(b) from test;

  VSIZE(A)   VSIZE(B)
---------- ----------
         7          7

Gruß

MP
 
Zuletzt bearbeitet von einem Moderator:
Zurück