尝试执行条件INSERT ALL时ORA-00904

时间:2017-09-11 14:31:33

标签: sql 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

表格如下:

Source1的

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

Target1为空,包含ID,VAL,DELETED_FLAG,VALIDFROM,VALIDTO列。 TMP_TABLE_FOR_UPDATE和TMP_TABLE_FOR_DELETE只有一列 - PROWID。

请,任何想法为什么?已经在这个问题上打破了我的头脑。

1 个答案:

答案 0 :(得分:0)

你能尝试一下吗(它对我有用)?我是凭经验做到的,并观察到在Oracle文档中他们不使用表限定符来表示值。而且,我使用别名ROW_ID更改了ROWID。

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

df = df.apply(lambda col: col.map('{:,.2f}'.format) if col.name != 'Counterparty' else col)