# Fehler bei Rückgabewerten



## K-Man (21. Okt 2008)

Hallo
Ich arbeite mit MS SQL Server 2005 und habe eine StoredFunction geschrieben. Da wir bei einem return noch ein Integer zurückgeliefert.

Also zB return 1

Wenn ich diese Methode jetzt in Java Aufrufe, dann bekomm ich eine Fehlermeldung:


```
CallableStatement cstmt = con.prepareCall("{call ? := spCheck(?, ?, ?, ?)}");
		    
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, "E0001");
cstmt.setInt(3, 10);
cstmt.registerOutParameter(4, java.sql.Types.INTEGER);
cstmt.registerOutParameter(5, java.sql.Types.CHAR);
cstmt.execute();
```

Hier die Fehlermeldung


```
java.sql.SQLException: Invalid JDBC call escape at line position 6.
	at net.sourceforge.jtds.jdbc.SQLParser.copyProcName(SQLParser.java:367)
	at net.sourceforge.jtds.jdbc.SQLParser.callEscape(SQLParser.java:482)
	at net.sourceforge.jtds.jdbc.SQLParser.escape(SQLParser.java:925)
	at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:1063)
	at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:156)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.<init>(JtdsPreparedStatement.java:104)
	at net.sourceforge.jtds.jdbc.JtdsCallableStatement.<init>(JtdsCallableStatement.java:67)
	at net.sourceforge.jtds.jdbc.ConnectionJDBC2.prepareCall(ConnectionJDBC2.java:2306)
	at net.sourceforge.jtds.jdbc.ConnectionJDBC2.prepareCall(ConnectionJDBC2.java:2292)
	at Test.main(Test.java:84)
```

Was mache ich falsch?


----------



## manuela (26. Okt 2008)

Hallo 

kannst du auch mal deine StoredFunction aus der datenbank mal zeigen ?

und wieviele returns hast du den??

gruß Manuela


----------



## manuela (26. Okt 2008)

Nachtrag

nach deinem Quelltext hast du drei output's sehr ungewöhnlich ich wüsste nicht das das geht!!!


```
CallableStatement cstmt = con.prepareCall("{call ? := spCheck(?, ?, ?, ?)}"); 

// ("{call ? := spCheck(?, ?, ?, ?)}");  wa bin ich mir nicht sicher da ich nur mqsql mache und da sieht das so aus

// "{ ?= call  spCheck (?,?,?,?) }"
          
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);  // hier ist dein erstes Out
cstmt.setString(2, "E0001"); 
cstmt.setInt(3, 10); 
cstmt.registerOutParameter(4, java.sql.Types.INTEGER); // hier ist dein zweites Out
cstmt.registerOutParameter(5, java.sql.Types.CHAR);  // hier ist dein drittes Out
cstmt.execute();
```

Gruß Manuela


----------



## K-Man (27. Okt 2008)

@manuela:
Vielen Dank. Mit deinem Code hat es geklappt. Ich musste einfach nur dass call hinter dem = setzen.

Nochmals vielen Dank.
Stefan


----------

