ORA-00904试图执行有条件插入全部



我是Oracle的全新Bie。有以下问题。尝试执行以下查询时:

    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

桌子看起来以下方式:

source1

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

target1是空的,带有ID,Val,Deleted_flag,有效From,有效列。tmp_table_for_update和tmp_table_for_delete只有一列-prowid。

请,有什么想法吗?

已经打破了我的头。

您可以尝试一下(对我有用)吗?我从经验上做到了这一点,并观察到在Oracle文档中,他们不使用表格限制符作为价值。此外,我使用Alias Row_id更改了ROWID。

我在SELECT中也添加了S.DWSACT。

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

最新更新