Oracle
 sql >> база данни >  >> RDS >> Oracle

2 начина да създадете таблица, ако тя вече не съществува в Oracle

Oracle Database не включва IF NOT EXISTS клауза с нейния CREATE TABLE изявление, както правят някои други СУБД.

Следователно, ако не искаме да генерираме грешка поради името на таблицата, което вече се използва, трябва да използваме други методи, за да проверим съществуването на таблицата.

Опция 1:Проверете DBA_TABLES Преглед

DBA_TABLES е изглед на речник на данни, който описва всички релационни таблици в базата данни. Неговите колони са същите като тези в ALL_TABLES .

Можем да проверим тази таблица, за да видим дали таблицата вече съществува, след което стартираме само CREATE TABLE изявление, ако вече не съществува.

Пример:

DECLARE
tbl_count number;
sql_stmt long;

BEGIN
    SELECT COUNT(*) INTO tbl_count 
    FROM dba_tables
    WHERE owner = 'HR'
    AND table_name = 'T1';

    IF(tbl_count <= 0)
        THEN
        sql_stmt:='
        CREATE TABLE T1 (
            c1 number(6,0),
            c2 varchar2(10)
        )';
        EXECUTE IMMEDIATE sql_stmt;
    END IF;
END;

Резултат:

PL/SQL procedure successfully completed.

В този случай таблицата е създадена, защото няма съществуваща таблица с името t1 .

Сега, ако се опитаме да създадем таблицата отново, ще получим същия изход, който PL/SQL процедурата е завършила успешно и няма да има грешка.

Ако обаче просто се опитаме да създадем таблицата, без първо да проверим за нейното съществуване, получаваме грешка:

CREATE TABLE T1 (
    c1 number(6,0),
    c2 varchar2(10)
);

Резултат:

Error report -
ORA-00955: name is already used by an existing object
00955. 00000 -  "name is already used by an existing object"

Опция 2:Тествайте за грешката

Друг начин да го направите е просто да продължите напред и да стартирате CREATE TABLE изявление и след това хванете всяка възникнала грешка ORA-00955. По-конкретно, ние улавяме всяка възникнала грешка в SQLCODE -955.

Пример:

DECLARE
sql_stmt long;

BEGIN
    sql_stmt:='
    CREATE TABLE T1 (
        c1 number(6,0),
        c2 varchar2(10)
    )';
    EXECUTE IMMEDIATE sql_stmt;

    EXCEPTION
        WHEN OTHERS THEN
            IF SQLCODE = -955 THEN
                NULL;
            ELSE
                RAISE;
            END IF;
END;

Резултат:

PL/SQL procedure successfully completed.

Пуснах това, въпреки че T1 таблицата вече съществуваше. Грешката ORA-00955 беше уловена и обработена, така че не получихме съобщение за грешка и таблицата не беше създадена.

Ако таблицата вече не е съществувала, таблицата щеше да бъде създадена и щяхме да видим същия изход.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам съществуващата последователност на Oracle за генериране на идентификатор в хибернация?

  2. Разберете историята на SQL заявките

  3. Oracle10g SQL опорна точка

  4. ВЪНШЕН КЛЮЧ ПРИ ОГРАНИЧЕНИЕ НА ИЗТРИВАНЕ Грешка - Oracle

  5. Синтактичен анализ на имена на таблици и колони от SQL/HQL Java