मैं Oracle के लिए कुल नौसिखिया हूँ। निम्न समस्या हो। निम्नलिखित क्वेरी करने का प्रयास करते समय:

    INSERT ALL
    WHEN (s.dwsact = 'I') THEN
        INTO TARGET1 (ID,VAL,DELETED_FLAG,VALIDFROM,VALIDTO)
        VALUES (s.ID, s.VAL, 'N', '11.09.17', to_date('59991231','YYYYMMDD'))
    WHEN (s.dwsact = 'U') THEN
        INTO STG.TMP_TABLE_FOR_UPDATE (PROWID)
        VALUES (t.ROWID)
    WHEN (s.dwsact = 'D') THEN
        INTO STG.TMP_TABLE_FOR_DELETE (PROWID)
        VALUES (t.ROWID)
    SELECT t.ROWID, s.ID, s.VAL FROM SOURCE1 s JOIN TARGET1 t  ON  s.ID = t.ID

मैं ला रहा हूँ:

    ORA-00904 "T"."ROWID": invalid identifier

तालिकाएँ इस तरह दिखती हैं:

स्रोत1

        ID        VAL DWSACT
---------- ---------- ------
         8         10 I
         5          4 D
         5          3 U

लक्ष्य1 ID,VAL,DELETED_FLAG,VALIDFROM,VALIDTO कॉलम के साथ खाली है। TMP_TABLE_FOR_UPDATE और TMP_TABLE_FOR_DELETE में केवल एक कॉलम है - PROWID।

कृपया, कोई विचार क्यों? इस प्रश्न पर मेरा सिर पहले ही तोड़ दिया है।

0
mr.kalvados 11 सितंबर 2017, 17:31
त्रुटि आपको समस्या बताती है। T.ROWID क्या है? क्या यह प्राथमिक कुंजी है?
 – 
Isaiah3015
11 सितंबर 2017, 17:34
लक्ष्य 1 तालिका में T.ROWID ROWID (पंक्तियों का विशिष्ट पहचानकर्ता) है, यह PK नहीं है
 – 
mr.kalvados
11 सितंबर 2017, 17:39
संभावित रूप से अपने INSERT INTO TARGET1 में देखें, आप पंक्तिबद्ध कॉलम खो रहे हैं और सीधे आईडी पर चले गए हैं। INTO TARGET1 (ID,VAL,DELETED_FLAG,VALIDFROM,VALIDTO) VALUES (s.ID, s.VAL, 'N', '11.09.17', to_date('59991231','YYYYMMDD'))
 – 
Isaiah3015
11 सितंबर 2017, 18:06

1 उत्तर

सबसे बढ़िया उत्तर

क्या आप इसे आजमा सकते हैं (यह मेरे लिए काम करता है)? मैंने इसे अनुभवजन्य रूप से किया और देखा कि ओरेकल डॉक्स में वे मूल्यों के लिए टेबल क्वालिफायर का उपयोग नहीं करते हैं। इसके अलावा, मैंने उपनाम ROW_ID का उपयोग करके ROWID को बदल दिया।

मैंने s.DWSACT को SELECT में भी जोड़ा है।

INSERT ALL
    WHEN (dwsact = 'I') THEN
        INTO TARGET1 (ID,VAL,DELETED_FLAG,VALIDFROM,VALIDTO)
        VALUES (ID, VAL, 'N', '11.09.17', to_date('59991231','YYYYMMDD'))
    WHEN (dwsact = 'U') THEN
        INTO STG.TMP_TABLE_FOR_UPDATE (PROWID)
        VALUES (ROW_ID)
    WHEN (dwsact = 'D') THEN
        INTO STG.TMP_TABLE_FOR_DELETE (PROWID)
        VALUES (ROW_ID)
    SELECT t.ROWID AS ROW_ID, s.ID, s.VAL, s.DWSACT FROM SOURCE1 s JOIN TARGET1 t  ON  s.ID = t.ID
0
etsa 11 सितंबर 2017, 18:12
धन्यवाद, लेकिन अब मुझे "ORA-00904:"DWSACT" मिल रहा है: अमान्य पहचानकर्ता"
 – 
mr.kalvados
11 सितंबर 2017, 18:12
@mr.kalvados मेरा अद्यतन संस्करण देखें (आप चयन में कॉलम भूल गए हैं)
 – 
etsa
11 सितंबर 2017, 18:13