PDA

View Full Version : SQL (Programmlogik)



JonnyRico
01-03-05, 14:29
Hallo,

ich habe folgendes Problem. Ich muss aus einer Datenbank Salden für 7 unterschiedliche Zeiträume für jeden Kunden ermitteln. Ich habe eine Prozedur die den Zweitraum und die Kundennummer empfägt, dann einen entsprechendes SQL-Statement baut und es ausführt:



/free
SQLStat='Select.....';
/end-Free

C/Exec SQL
C+ Prepare DynSQL From :SQLStat
C/End-Exec

C/Exec SQL
C+ Declare SQLCur Cursor For DynSQL
C/End-Exec

C/Exec SQL
C+ Open SQLCur
C/End-Exec

C/Exec SQL
C+ Fetch SQLCur into :Saldo :AnzSaldo
C/End-Exec

C/Exec SQL
C+ Close SQLCur
C/End-Exec


Da ich sieben unterschiedliche Zeiträume habe wird das ganze Ding 7 mal durchlaufen und es dauert eeeeeeeewwwwwwwwigggggggg! Es wird jedes mal ein neuer Zugriffspfad aufgebaut. Was kann man da machen?

Gruß

Sascha

Fuerchau
01-03-05, 14:59
1. Prüfe, ob du den Select nicht statisch verwenden kannst, wenn die Zeiträume nur über Variablen abgefragt werden:

select ...
where mydate between : fromdate and : todate

2. Lege einen permanenten Zugriffspfad für die gewünschten Zugriffe an, Hilfe bekommst du, wenn du per STRDBG das Programm startest aus dem Joblog.

JonnyRico
01-03-05, 15:47
Hey danke,

ich werde das mal prüfen. Danke

Gruß

Sascha

JonnyRico
01-03-05, 15:49
Nochmal kurz eine Frage. Ich habe mir eine LF gebaut und greife jetzt auch über die zu. Die wird auch genutzt. Allerdings baut er trotzdem noch immer einen zusätzlichen Termp-Index auf. Kann ich da noch was tunen?

Gruß

Sascha

Fuerchau
01-03-05, 16:58
Teste das Programm unter STRDBG !
Im Joblog findest du Hinweise, warum er den Zugriffspfad nicht verwenden kann und wie der neue besser auszusehen hätte.
Bei SQL kannst du übrigens IMMER auf die PF gehen.