У меня возникли проблемы с получением ошибок ORA-00942, так как таблица не существует. Это правда, что нет, но до того, как я получаю ошибки, он должен создать таблицу, если она не существует. Таким образом, когда он попадает в тот момент, таблица должна быть там:Ошибка 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;
/
Откуда Вы знаете, что tcount 0? – OldProgrammer
Ваш код не будет компилироваться, если таблица не существует. Примените EXECUTE IMMEDIATE на счету SELECT ... и INSERT. – Multisync
Возможный дубликат [EXECUTE IMMEDIATE Таблица temp в oracle не создается ORA-00942] (http://stackoverflow.com/questions/26212557/execute-immediate-temp-table-in-oracle-does-not-get- сотворен ор-00942) – user272735