2017-11-23 3 views
1

Ich war auf viele Anfragen gestoßen, die dem genannten Titel ähnelten. Aber meine Situation ist ganz anders. Ich versuche, den Befehl INSERT für eine Tabelle ausführen, die SELECT Abfrage hat, um die Spaltenwerte aufzufüllen. Unten ist die Abfrage, die ich ausführen möchte.ORA-00917: fehlendes Komma in der DATE-Spalte

INSERT INTO ELEC_ORDER_HT (OMS_SEQ.NEXTVAL, CUST_ID, ORDER_DATE, SHIP_METHOD, 
    REC_CREN_TM, REC_HIST_CREN_TM AS '23-NOV-17 01.56.01.103000 AM', ORDER_ID) 
SELECT ELEC_ORDER.CUST_ID AS CUST_ID, ELEC_ORDER.ORDER_DATE AS ORDER_DATE, 
    ELEC_ORDER.SHIP_METHOD AS SHIP_METHOD, ELEC_ORDER.REC_CREN_TM AS REC_CREN_TM, 
    ELEC_ORDER.ORDER_ID AS ORDER_ID 
FROM ELEC_ORDER 
WHERE ELEC_ORDER.CUST_ID = 'CSTMR10001' 
AND ELEC_ORDER.ORDER_ID = 'ELORD10001'; 

Anzahl der Spalte in ELEC_ORDER_HT und ELEC_ORDER Tabellen sind unterschiedlich. Ich habe den folgenden Fehler erhalten, als ich die obige Abfrage ausgeführt habe.

REC_CREN_TM, REC_HIST_CREN_TM AS '23-NOV-17 01.56.01.103000 AM', ORDER_ID) 
           * 
ERROR at line 2: 
ORA-00917: missing comma 

Wie kann ich dieses Problem beheben?

Antwort

2
INSERT INTO ELEC_ORDER_HT (
    OMS_SEQ.NEXTVAL, -- This does not appear to be a column name 
    CUST_ID, 
    ORDER_DATE, 
    SHIP_METHOD, 
    REC_CREN_TM, 
    REC_HIST_CREN_TM AS '23-NOV-17 01.56.01.103000 AM', -- you cannot use aliases here 
    ORDER_ID 
) 
SELECT ELEC_ORDER.CUST_ID AS CUST_ID, 
     ELEC_ORDER.ORDER_DATE AS ORDER_DATE, 
     ELEC_ORDER.SHIP_METHOD AS SHIP_METHOD, 
     ELEC_ORDER.REC_CREN_TM AS REC_CREN_TM, 
     ELEC_ORDER.ORDER_ID AS ORDER_ID   -- only 5 columns but 7 in the previous part 
FROM ELEC_ORDER 
WHERE ELEC_ORDER.CUST_ID = 'CSTMR10001' 
AND ELEC_ORDER.ORDER_ID = 'ELORD10001'; 

Ist nicht gültig. Die Syntax ist:

INSERT INTO table_name (column_name, column_name) 
SELECT value, value FROM other_table 

Sie scheinen zu versuchen, Spaltennamen mit Konstanten/Sequenzwerte zu ersetzen und dann die Werte aus der SELECT Erklärung weggelassen wird.

Sie wollen so etwas wie:

INSERT INTO ELEC_ORDER_HT (
    OMS,      -- or whatever the correct column name is 
    CUST_ID, 
    ORDER_DATE, 
    SHIP_METHOD, 
    REC_CREN_TM, 
    REC_HIST_CREN_TM, 
    ORDER_ID 
) 
SELECT OMS_SEQ.NEXTVAL, 
     CUST_ID, 
     ORDER_DATE, 
     SHIP_METHOD, 
     REC_CREN_TM, 
     TIMESTAMP '2017-11-23 01.56.01.103000', -- or SYSTIMESTAMP if you want current time 
     ORDER_ID 
FROM ELEC_ORDER 
WHERE CUST_ID = 'CSTMR10001' 
AND ORDER_ID = 'ELORD10001'; 
+0

Vielen Dank. Der obige Ansatz hat gut funktioniert. Vielen Dank für Ihre sofortige Unterstützung. – ram