PLSQL:ORA-00904 游标中的标识符无效 Select

PLSQL : ORA-00904 invalid identifier in Cursor Select

我已经 EXTERNAL TABLE 创建如下。

CREATE TABLE EXTERNAL_TABLE
( "col1"           DATE
, "col2"           DATE
) ORGANIZATION external
  ( TYPE oracle_loader
    DEFAULT DIRECTORY  INPUT_DIRECTORY
    ACCESS  PARAMETERS
    ( RECORDS DELIMITED  BY NEWLINE
      LOGFILE 'Some.log'
      BADFILE 'Some.bad'
      FIELDS  TERMINATED BY "|" LDRTRIM
      ( "col1" DATE
      , "col2" DATE MASK "MM/DD/YYYY"
      )
    )
    LOCATION ('SomeDat.dat')
  )
  PARALLEL 1
  REJECT LIMIT UNLIMITED
/

我正在将加载到外部 table 的数据填充到事务 table 中以供进一步处理。

PROCEDURE upload
IS
lv_post_dt DATE;
TYPE dataTblType IS TABLE OF My_Transaction_Table%ROWTYPE;
lv_dataTbl    dataTblType;
    
CURSOR externalCur IS
      SELECT lv_post_dt col1,
             col2  --ORA-00904 invalid identifier is encountered here
      FROM  EXTERNAL_TABLE;
      
BEGIN
lv_post_dt := SYSTIMESTAMP;

OPEN externalCur;
    LOOP
      FETCH externalCur BULK COLLECT
        INTO lv_dataTbl LIMIT 25000;
    
      EXIT WHEN lv_dataTbl.COUNT = 0;
    
      FOR i IN 1 .. lv_dataTbl.COUNT LOOP
        --Insert recordsinto My_Transaction_Table
      END LOOP;
CLOSE externalCur;

END upload;

下面我也试过了

CURSOR externalCur IS
      SELECT lv_post_dt col1,
             ext.col2  --ORA-00904 invalid identifier is encountered here
      FROM  EXTERNAL_TABLE ext;
  
CURSOR externalCur IS
      SELECT lv_post_dt col1,
             EXTERNAL_TABLE.col2  --ORA-00904 invalid identifier is encountered here
      FROM  EXTERNAL_TABLE; 


  

即使 col2 属于 EXTERNAL_TABLE,为什么我会收到无效标识符错误以及如何解决这个问题?

当我写 lv_post_dt col1 那么为什么它有效?

那是因为 不幸的是 双引号。你为什么使用它们?他们带来的只是问题。

这就是你所做的(忽略这不是外部的事实 table):

SQL> CREATE TABLE EXTERNAL_TABLE
  2  ( "col1"           DATE
  3  , "col2"           DATE
  4  );

Table created.

你能select一切吗?当然:

SQL> select * from external_table;

no rows selected

你能select只col2吗?并不真地;这是你的 ORA-00904: invalid identifier:

SQL> select col2 from external_table;
select col2 from external_table
       *
ERROR at line 1:
ORA-00904: "COL2": invalid identifier

为什么会这样?因为 双引号 。一旦你使用它们并在命名对象时混合(或小写)字母大小写,你必须每次都使用双引号并匹配字母大小写:

SQL> select "col2" from external_table;

no rows selected

SQL>

你应该怎么办?在我看来,删除 table 并重新创建它,但这次省略所有地方的双引号。