schelinho
Goto Top

SQL-Statement in Excel .dqy Query - (Zeitrahmen) funktioniert nicht ?

Hallo zusammen,

folgendes Thema:

ich habe ein SQL-Statement mit Variablen Usereingaben, welches im PL/SQL-Developer auch tadellos funktioniert.
Die Variable ist eine Nummer, und ein Zeitrahmen.
Dieses Statement möchte ich dann im Excel als .dqy ausführen. Das funktioniert mit den ersten zwei Nummern, aber die Eingabe des Zeitrahmens funktioniert nicht.

So sieht's im PL/SQL aus:
...
Where
BR.RK_XXXXX = BF.RK_ReportKey
and BF.BF_EntityKey = TF.BF_EntityKey
and BR.BR_XXXX = '&XXXX'
and TFA.TF_EntityKey = TF.TF_EntityKey
and TFA.AS_Date BETWEEN TO_DATE('&Datum1', 'mm/dd/yyyy') and TO_DATE('&Datum2', 'mm/dd/yyyy')

So sieht die Query dann im .dqy-file aus:

...
Where BR.RK_ReportKey = BF.RK_ReportKey and BF.BF_EntityKey = TF.BF_EntityKey and (BR.BR_XXXX=?) and TFA.TF_EntityKey = TF.TF_EntityKey and (TFA.AS_Date BETWEEN TO_DATE=?) and (TFA.AS_Date TO_DATE=?)
...

--> wie man sieht, ist im .dqy die User-Variable zu ändern auf =? .. Das funktioniert auch für (BR.BR_XXXX=?) .. Sobald ich aber den "Zeitrahmenblock" hinzunehme, crashed das Ganze.
Fehlermeldung: [Oracle][ODBC][Ora]ORA-00905: Schlüsselwort fehlt.

--> Irgendwo bei dem Datum mache ich da wohl was falsch..

Vielen Dank im Voraus für die Unterstützung!

Content-ID: 347713

Url: https://administrator.de/contentid/347713

Ausgedruckt am: 24.11.2024 um 16:11 Uhr

SvenGuenter
SvenGuenter 30.08.2017 um 12:36:10 Uhr
Goto Top
Auf anhieb würde ich erst mal hier ein Problem sehen

Where BR.RK_ReportKey = BF.RK_ReportKey and BF.BF_EntityKey = TF.BF_EntityKey and (BR.BR_XXXX=?) and TFA.TF_EntityKey = TF.TF_EntityKey and (TFA.AS_Date BETWEEN TO_DATE=?) and (TFA.AS_Date TO_DATE=?)

schau dir aml die Klammer im between statement an.

Schreibe das mal so
and TFA.AS_Date BETWEEN TO_DATE=? and TFA.AS_Date TO_DATE=?

oder

and TFA.AS_Date BETWEEN (TO_DATE=?) and (TFA.AS_Date TO_DATE=?)
Schelinho
Schelinho 30.08.2017 um 14:17:27 Uhr
Goto Top
Hi!

Bei
TFA.AS_Date BETWEEN TO_DATE=? and TFA.AS_Date TO_DATE=?
kommt: [Oracle][ODBC][Ora]ORA-00905: Schlüsselwort fehlt.

Bei
TFA.AS_Date BETWEEN (TO_DATE=?) and (TFA.AS_Date TO_DATE=?)
kommt: [Oracle][ODBC][Ora]ORA-00907: Rechte Klammer fehlt.

Habs auch versucht mit
TFA.AS_Date BETWEEN ((TO_DATE=?) and (TFA.AS_Date TO_DATE=?))
oder
TFA.AS_Date BETWEEN (TO_DATE=?) and (TFA.AS_Date TO_DATE=?))

--> auch hier "....Rechte Klammer fehlt."
SvenGuenter
Lösung SvenGuenter 30.08.2017 aktualisiert um 14:41:05 Uhr
Goto Top
Jetzt sehe ich gerade noch was du möchtest den TO_DATE eingrenzen richtig? dann folgendes

TFA.AS_Date BETWEEN TO_DATE=? and TO_DATE=?

Ich erkläre mal in Worten die Klausel. Hier wird geschaut welches Datensatz aus der Tabelle TFA den Wert im Feld AS_DATE zwischen den Datumwerten des Feldes TO_DATE liegt. Setze hier mal Werte ein
Also sowas hier

Select * from Table1 where id = 1234 and Date between '1971-07-22 00.00.000' and '1981-07-22 00.00.000'

innerhalb der between klausel brauchst du keine Variablen sondern kannst direkt werte verwenden.

wenn du die TO_DATE Function brauchst musst du schauen ob dein DB Server das kann oder ob du cast oder Convert oder was acuh immer nehmen musst.

Beispiel
Select * from Table1 where id = 1234 and Date between cast('1971-07-22 00.00.000' as Datetime) and cast('1981-07-22 00.00.000' as Datetime)

Bei Variablen
Select * from Table1 where id = 1234 and Date between cast(? as Datetime) and cast(? as Datetime)

und bei Oracle
Select * from Table1 where id = 1234 and Date between TO_DATE(?,'yyyymmdd') and TO_DATE(?,'yyyymmdd')

Aber auf das Datumsformat von Date achten und dann das passende in der TO_DATE angeben.
Schelinho
Schelinho 30.08.2017 um 15:58:20 Uhr
Goto Top
So hats jetzt funktioniert!
BETWEEN TO_DATE(?, 'mm/dd/yyyy') and TO_DATE(?, 'mm/dd/yyyy')

Super, danke!

Eine Frage hätte ich noch, sozusagen als "Draufgabe":
Excel fragt die Variablen dann ja ab, und bezeichnet diese als "Parameter 1", "Parameter 2" usw.. Kann man diese Bezeichnung auch dauerhaft umbenennen?
Ich bin schon drauf gekommen, dass ich Parameter1 etc. in den "External Data properties" bei Parameter string-values ändern kann.
Dieser neue String wird dann auch so übernommen, und statt Parameter1 angezeigt.
Wenn ich dann aber Excel schließe, und die Query neu starte, steht wieder "Parameter1" da..
Wäre natürlich super das dauerhaft so behalten zu können, vor allem im Hinblick für die User wegen Datumsformat..

Danke!
SvenGuenter
SvenGuenter 31.08.2017 um 16:26:17 Uhr
Goto Top
Da müsste ich selber googlen aber schaue mal hier

Parameter änder


Gruss

Sven
Schelinho
Schelinho 05.09.2017 um 10:31:59 Uhr
Goto Top
Hi Sven,

hab genau das gemacht, x-mal probiert, mit "Alle aktualisieren" bzw "Aktualisieren"..
Dann kommt genau 1x mein angepasstes Prompt. Schließe ich dann aber das Excel, und starte die Abfrage erneut, kommt wieder "Parameter1" etc..