2017-12-31 26 views
-2

Ich bekomme "Invalid Number"Oracle sqlplus Abfrage

Kann mir bitte jemand sagen, was ich hier falsch mache ??? 'YYYY-MM':

select TO_CHAR(a.START_TIME,'YY-MON-DD HH24') as START_TIME, 
     count(*) AS NbOperations, 
     SUM(CASE WHEN OPERATION_RESULT=0 THEN 1 ELSE 0 END) AS Success, 
     SUM(CASE WHEN OPERATION_RESULT=200 THEN 1 ELSE 0 END) AS Cancel, 
     SUM(CASE WHEN OPERATION_RESULT=203 THEN 1 ELSE 0 END) AS AppletInternalError, 
     SUM(CASE WHEN OPERATION_RESULT=406 THEN 1 ELSE 0 END) AS TimeoutWaitForCard, 
     SUM(CASE WHEN OPERATION_RESULT=413 THEN 1 ELSE 0 END) AS BillingError, 
     SUM(CASE WHEN OPERATION_RESULT=1000 THEN 1 ELSE 0 END) AS ABANDONNED, 
     SUM(CASE WHEN OPERATION_RESULT=1004 THEN 1 ELSE 0 END) AS ABANDON_FOR_NEW_OPERATION, 
     SUM(CASE WHEN OPERATION_RESULT NOT IN (0,200,203,406,413,1000,1004) THEN 1 ELSE 0 END) AS NbOthers 
from MyTable1 a, 
     MyTable2 b 
where OPERATION_TYPE in (2,3,4,5) 
and a.OPERATION_TYPE=b.OPERATION_ID 
and a.START_TIME >= to_timestamp('&1', 'YYYY-MM') 
and a.START_TIME < to_timestamp('&2', 'YYYY-MM') + interval '1' month 
group by TO_CHAR(a.START_TIME,'YY-MON-DD HH24') 
order by TO_CHAR(START_TIME,'YY-MON-DD HH24'); 
+0

@scaisEdge, diese (Apostroph um 1) ist sicherlich ** nicht ** ein Grund, weil Syntax einfache Anführungszeichen erfordert beim Umgang mit Intervalle. Lesen Sie "Intervallliterale" in der Dokumentation, hier: https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#i38598. Was ist der Grund? Keine Ahnung; Wir haben weder Tabellenbeschreibung noch Daten, daher ist es schwer zu erraten. Sie haben es versucht, aber es ist fehlgeschlagen :) – Littlefoot

+0

Was hat das speziell mit SQL * Plus zu tun, außer den Substitutionsvariablen? Welche Werte verwenden Sie für diese? Sie müssten etwas wie 2018-01 sein (keine Anführungszeichen). –

+0

Übrigens, willst du wirklich 'nach TO_CHAR sortieren (START_TIME, 'YY-MON-DD HH24')'? Das wird April und August vor Februar und Januar (unter der Annahme englischer Monatsnamen) geben. –

Antwort

0

überprüfen Sie das Format Ihrer Eingaben & 1 und 2 & vielleicht ist es nicht mit dem Datumsmaske entsprechen. Ein weiterer möglicher Grund ist der Inhalt der Tabelle: OPERATION_TYPE und OPERATION_RESULT sind beides Datentypen? Möglich sind dort Dinge, die sich von einer Nummer unterscheiden.

0

Ich bin in der Lage, das Problem mit folgenden SQL-Code zu lösen:

select TO_CHAR(a.START_TIME,'YY-MON-DD HH24') as Hourly, count(*) AS NbOperations, 
SUM(CASE WHEN OPERATION_RESULT=0 THEN 1 ELSE 0 END) AS Success, 
SUM(CASE WHEN OPERATION_RESULT=200 THEN 1 ELSE 0 END) AS Cancel, 
SUM(CASE WHEN OPERATION_RESULT=203 THEN 1 ELSE 0 END) AS AppletInternalError, 
SUM(CASE WHEN OPERATION_RESULT=406 THEN 1 ELSE 0 END) AS TimeoutWaitForCard, 
SUM(CASE WHEN OPERATION_RESULT=413 THEN 1 ELSE 0 END) AS BillingError, 
SUM(CASE WHEN OPERATION_RESULT=1000 THEN 1 ELSE 0 END) AS ABANDONNED, 
SUM(CASE WHEN OPERATION_RESULT=1004 THEN 1 ELSE 0 END) AS ABANDON_FOR_NEW_OPERATION, 
SUM(CASE WHEN OPERATION_RESULT NOT IN (0,200,203,406,413,1000,1004) THEN 1 ELSE 0 END) AS NbOthers 
from gsg3_invocation_history a, GSG3_OPERATION_TYPE b where START_TIME >= to_timestamp('&1', 'YYYY-MM') 
and START_TIME < to_timestamp('&2', 'YYYY-MM') + interval '1' month and OPERATION_TYPE in (2,3,4,5) and a.OPERATION_TYPE=b.OPERATION_ID 
group by TO_CHAR(a.START_TIME,'YY-MON-DD HH24') order by TO_CHAR(START_TIME,'YY-MON-DD HH24');