ORA-00942错误,将创建表

时间:2014-11-26 14:49:08

标签: oracle plsql

我遇到ORA-00942错误的问题,说表格不存在。确实没有,但在我得到错误的那一点之前,它应该是创建表格,如果它不存在的话。因此,当它到达那一点时,表应该在那里:

BEGIN
  SELECT COUNT(*) INTO tCount
  FROM user_tables
  WHERE table_name='MY_TABLE';
  IF tCount=0 THEN
    EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE
      (T_ID NUMBER(38,0),
      T_DATE DATE,
      T_COUNT NUMBER(38,0),
      CONSTRAINT MY_TABLE_pk PRIMARY KEY (T_ID,T_DATE) )';
  END IF;

  LOOP
    FOR idx IN 1 .. CursorTable.COUNT LOOP
      SELECT COUNT(*) INTO pk_check
      FROM MY_TABLE
      WHERE T_ID=CursorTable(idx).T_ID AND T_DATE=CursorTable(idx).T_DATE;
      IF (pk_check=0) THEN
        INSERT INTO MY_TABLE
          (T_ID,
          T_DATE,
          T_COUNT)
        VALUES 
          (CursorTable(idx).T_ID,
          CursorTable(idx).T_DATE,
          CursorTable(idx).T_COUNT);
      END IF;
    END LOOP;
  END LOOP;
END;
/

1 个答案:

答案 0 :(得分:0)

您遇到此问题,因为您创建的表格以及随后的选择(LOOP)位于同一个BEGIN ... END块中。

BEGIN语句不同于使用BEGIN关键字启动BEGIN ... END复合语句。后者不会导致隐式提交。从(http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html

引用

尝试将选择(LOOP)移到BEGIN..END之外,它应该可以正常工作。