Zitat Zitat von peter.kinne
Wenn ich aber eine Filterfunktion auswähle, z. B. (F1JAHR)Jahr = '2004', bekomme ich den SQL-Fehler 312 (Variable &1 nicht definiert oder nicht verwendbar) beim "PREPARE S1 FROM :SQLSTA".
Die Variable SQLSTA hat zu diesem Zeitpunkt den Wert:
'SELECT FELD1, FELD2, FELD3 from TABELLE_1 WHERE FELD1=:F1JAHR'
Dein Problem liegt in der Verwendung der Host Variablen:

Bei dynamischem SQL hast Du zwei Möglichkeiten:
1. Die Host-Variablen auflösen
Beispiel:
PHP-Code:
SQLSTA 'Select Feld1, Feld2, Feld3 from Tabelle_1 
           where Feld1 = ''' 
HostVar1 ''' and FeldNum = ' HostVar2
Bei alphanumerischen Feldern müssen die Hochkommata korrekt angegeben werden.
Datums-Felder werden korrekt konvertiert, sofern sie als alphanumerische Darstellung mit 4-stelligem Jahr übergeben werde.

2. Verwendung von Parameter-Markern
Die Variablen werden dann beim PREPARE Befehl über USING angegeben.
Beispiel:
PHP-Code:
    SQLSTA 'Select Feld1, Feld2, Feld3 from Tabelle_1 
                 where Feld1 = ? and FeldNum = ?'
;
 /
End-Free
C
/EXEC SQL PREPARE MySQL From SQLSTA 
C
+         using :HostVar1, :HostVar2
C
/END-EXEC 
Wenn es nur darum geht unterschiedliche Auswahlen zu treffen, jedoch immer die gleichen Felder in der gleichen Reihenfolge angezeigt werden sollen, brauchst Du kein dynamisches SQL.

In der WHERE CLAUSE kannst Du für jede Auswahl BETWEEN Von-/Bis-Wert angeben. Je nach Auswahl füllst Du die Von-/Bis-Werte entweder mit dem ausgewählten Wert oder mit *LoVAL und *HiVal. Der Query-Optimizer erkennt ob ein bestimmter Wert oder alle Werte ausgewählt wurden und sucht sich daraufhin den passenden Zugriffs-Weg.

Selbst Sortierungen können durch den Einsatz von CASE-Bestimmungen variabel gestaltet werden.

Birgitta