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-Key: 347713

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

Printed on: April 24, 2024 at 15:04 o'clock

Member: SvenGuenter
SvenGuenter Aug 30, 2017 at 10:36:10 (UTC)
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=?)
Member: Schelinho
Schelinho Aug 30, 2017 at 12:17:27 (UTC)
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."
Member: SvenGuenter
Solution SvenGuenter Aug 30, 2017 updated at 12:41:05 (UTC)
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.
Member: Schelinho
Schelinho Aug 30, 2017 at 13:58:20 (UTC)
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!
Member: SvenGuenter
SvenGuenter Aug 31, 2017 at 14:26:17 (UTC)
Goto Top
Da müsste ich selber googlen aber schaue mal hier

Parameter änder


Gruss

Sven
Member: Schelinho
Schelinho Sep 05, 2017 at 08:31:59 (UTC)
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..