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!
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 347713
Url: https://administrator.de/contentid/347713
Ausgedruckt am: 24.11.2024 um 16:11 Uhr
6 Kommentare
Neuester Kommentar
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=?)
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=?)
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.
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.