2016-09-15 10 views
0

Ich versuche, eine mathematische Abfrage (mit einem booleschen) zu verwenden, um eine Spalte in meiner Oracle SQL-Tabelle zu füllen, aber bekomme einen Fehler 'ungültiger Datentyp', den ich als eingerichtet habe Dezimalzahlen. schätzen würde jede Hilfe ... Danke GavinSQL ALTER TABLE MATHES QUERY

ALTER TABLE GS_MRC_EXISTING 
ADD IF (GROSS_LAST + DISC_LAST) < (GROSS_THIS + DISC_THIS) = TRUE THEN DEC_GROSS = (GROSS_THIS - GROSS_LAST) 

CREATE TABLE GS_MRC_EXISTING (
CUST_CODE varchar (255), 
GROSS_LAST decimal (6,2), 
DISC_LAST decimal (6,2), 
GROSS_THIS decimal (6,2), 
DISC_THIS decimal (6,2), 
INC_GROSS decimal (6,2), 
INC_DISC decimal (6,2), 
DEC_GROSS decimal (6,2), 
DEC_DISC decimal (6,2) 
) 
+1

Es gibt keine solche Dinge als "ADD IF" in Oracle. Wo hast du das gefunden? Auch Oracle hat keinen booleschen Datentyp, daher ist auch die Bedingung '= TRUE' ungültig. –

+0

Hallo Bob, ich habe das nur hinzugefügt, damit Sie die Dateitypen sehen konnten, die ich erstellt hatte, falls das das Problem war. Ich habe es geschafft, CUST_CODE, GROSS_LAST, DISC_LAST, GROSS_THIS, DISC_THIS zu füllen. Und müssen sie vergleichen, um die letzten vier Spalten zu füllen. – Gavin

Antwort

1

Ich bin wirklich nicht ganz sicher von Ihrer Absicht, aber vielleicht Sie versuchen, eine berechnete Spalte zu definieren:

CREATE TABLE GS_MRC_EXISTING (
CUST_CODE varchar (255), 
GROSS_LAST decimal (6,2), 
DISC_LAST decimal (6,2), 
GROSS_THIS decimal (6,2), 
DISC_THIS decimal (6,2), 
INC_GROSS decimal (6,2), 
INC_DISC decimal (6,2), 
DEC_GROSS decimal (6,2) 
    GENERATED ALWAYS AS (CASE 
         WHEN (GROSS_LAST + DISC_LAST) < (GROSS_THIS + DISC_THIS) 
          THEN GROSS_THIS - GROSS_LAST 
         ELSE 0 
         END), 
DEC_DISC decimal (6,2) 
) 
+0

danke Bob, ich versuche zu berechnen Spalten basierend auf dem Wert der anderen Spalten. Wird das Erstellen im Bereich "Tabelle erstellen" so funktionieren? – Gavin

+0

Ja, es funktioniert ganz gut. –

+0

danke, schätze deine Unterstützung. – Gavin

Verwandte Themen