Zitat Zitat von Fuerchau Beitrag anzeigen
Nun kann ich nicht verstehen wieso ODBC bzgl. der SQL's an Grenzen stößt.
Ob du die SQL's per Procedure oder native ausführst macht da keinen Unterschied.
Du hast da halt Performanceprobleme, die eine Prozedur auch nicht auflöst wenn der SQL derselbe ist.
Die einzige Grenze die ich kenne ist die max. Länge des SQL-Strings:
Bei SBCS = 32K, bei Unicode = 16K.
Vielleicht habe ich mich falsch ausgedrückt. Mit "an seine Grenzen" meine ich nicht Leistungsgrenzen, sondern die Fähigkeit, datenbankspezifische Besonderheiten zu akzeptieren.

Beispiel:
select rownumber() over() , table.* from lib.table

Ergebnis:
Fehler in der Liste der Funktionsargumente: "(" wurde nicht erkannt.
Fehler in der Liste der Funktionsargumente: ")" wurde nicht erkannt.
Analysieren von Abfragetext nicht möglich.

Ist klar, liegt an "rownumber() over()" aber anders kann ich halt die Zeilennummer bei DB2 nicht ermitteln. Geht auch nicht, wenn ich eine Sortierung angebe ( rownumber() over(order by field) )

Bei komplexen Abfragen, die diverse JOINs und Unterabfragen beinhalten, verschluckt sich der ODBC-Treiber (oder die Microsoft Data Tools ?) auch. Diese Abfragen teste ich immer mittels STRSQL, dort funktionieren sie.


Zitat Zitat von Fuerchau Beitrag anzeigen
Ansonsten gilt für Prozeduraufrufe, dass die Parameter genau zur Definition passen müssen.
Definierst du also CHAR(10), kannst du nicht CHAR(3) übergeben sondern musst mit Leerzeichen auffüllen oder per CAST('001' as char(10)) anpassen.
Besser wäre die Definition per VARCHAR(10), dann geht 0-10 Zeichen.

Noch besser wäre es, wenn du per ODBC mit Parametermarkern und Command-Objekten umgehst.
Wenn ich folgendes aufrufe:

{ call LIB.SP_TEST( ? ) }

kommt die Fehlermeldung:

Fehlerquelle: CWBODBC.DLL
Fehlermeldung: ERROR [HY000] [IBM][SYSTEM i Access ODBC-Treiber]...
Routine SP_TEST in LIB mit angegebenen Parametern nicht gefunden.


Im Prinzip geht es mir auch nur darum:

Wie kann ich per ODBC ( MS Reporting-Service 2016 ) eine SQL-Prozedur ausführen?

Die formale Syntax lautet: { [?=] call LIB.PROC ( [? [, ? ... ]] ) }
https://www.ibm.com/support/knowledg...z_esccall.html

Das führt aber zu der o.a. Fehlermeldung und daher stehe ich quasi auf dem Schlauch...