已经打破了我的头。
我是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