Я пытаюсь создать таблицу, если она еще не существует.В настоящее время я проверяю, существует ли он сначала в DBA_TABLES
, и если этот запрос ничего не возвращает, вставьте.Есть ли способ просто проверить одно и то же утверждение, чтобы мне не приходилось разбивать его на отдельные запросы?
Это то, что у меня сейчас.
BEGIN
SELECT COUNT(*)
INTO lvnTableExists
FROM DBA_TABLES
WHERE Table_Name = 'SOME_TABLE';
IF lvnTableExists = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE SOME_TABLE AS (SELECT * FR0M OTHER_TABLE)';
END IF;
END;
Это что-точто я собираюсь.
DECLARE
sql VARCHAR2(100000);
BEGIN
sql := 'CREATE TABLE SOME_TABLE ' ||
'AS (SELECT * FROM OTHER_TABLE) ' ||
'WHERE NOT EXISTS (SELECT NULL ' ||
'FROM DBA_OBJECTS d WHERE d.Object_Name = 'SOME_TABLE' AND ' ||
'd.Owner = 'SOME_TABLE')';
EXECUTE IMMEDIATE sql;
END;
Проблема в том, что вы не можете поместить WHERE NOT EXISTS
в оператор CREATE TABLE AS
.