создать запрос таблицы в oracle-ORA 00922

Я пытаюсь создать таблицу в oracle 11g, которая должна быть создана только в первый раз, как в случае, если она не существует. Если он существует, он не должен создавать таблицу.

create table IF NOT EXISTS sample_temp
(
    SFL_ID number(10) not null,
    STM_ID number(10) not null,
    FIL_ID number(10) not null,
    SYSTEM_GENERATED_FL char null    ,
    SFL_DELETE_FL char not null,
    SFL_VERSION_ID number(10) not null,
    PTN_ID number(10) not null); 

Это дает ошибку ORA-00922, сообщая синтаксическую ошибку рядом со словами «если нет». Что я делаю не так? «Если не существует» не поддерживается в Oracle? тогда как я должен это делать? Я на самом деле пытаюсь создать это через jdbc.

3 ответа

  1. Oracle не поддерживает IF NOT EXISTSсинтаксис. Самым простым решением было бы выполнить другой запрос, чтобы проверить, существует ли таблица в схеме базы данных.

    Если вы подключаетесь как пользовательorcl, и таблица, которую вы пытаетесь создать, будет на той же схеме, то вы можете сделать это

     select count(*) from user_tables where table_name=upper('yourtable');
    

    если счетчик возвращает 1, то вы знаете, что таблица существует, и можете пропустить процесс создания таблицы. В противном случае создайте таблицу.

  2. Вы не можете использовать команду «если не существует» перепроверить, если таблица уже существует или нет. Вы можете сделать одну вещь: вы можете использовать запрос USER_TABLES или DBA_TABLES, чтобы проверить, существует ли ваша таблица или нет .Если он существует, то делайте то, что вы хотите сделать, а если он не существует, то вы можете создать новый .

  3. Можно просто отправить инструкцию CREATE TABLE в Oracle engine. Если таблица существует, это вернет ошибку, сообщающую вам, что таблица уже существует. Если это необходимо для дальнейшей обработки кода, можно просто записать это сообщение об ошибке.