Oracle JDBC создает таблицу, последовательность и триггер - PullRequest
3 голосов
/ 26 сентября 2011

Я пытаюсь создать таблицу с последовательностью и триггером для этой последовательности. Когда я делаю это в издании Oracle Express, у меня появляются следующие операторы SQL. Которые ДОЛЖНЫ работать правильно в Oracle Express, используя того же пользователя, которого я использую в JDBC.

CREATE table "TEST" (
    "ID"         NUMBER(10) NOT NULL,
    "NAME"       VARCHAR2(20),
    constraint  "TEST_PK" primary key ("ID")
)


CREATE sequence "TEST_SEQ" 


CREATE trigger "BI_TEST"  
  before insert on "TEST"              
  for each row 
begin  
  if :NEW."ID" is null then
    select "TEST_SEQ".nextval into :NEW."ID" from dual;
  end if;
end;

Итак, теперь я помещаю каждое из них в список строк и выполняю 1 по одному так:

List<String> commands = new ArrayList<String>(4);
commands.add("Create table ...");
commands.add("Create sequence ...");
commands.add("Create trigger...");

st = con.createStatement();
for (String command : commands) {
    st.execute(command);
}

и т.д ...

Но я получаю ошибку с оператором триггера. «Ошибка с командой Oracle: ORA-00942: таблица или представление не существует»

Мне кажется, что Oracle еще не видел новую таблицу на данный момент. Как я могу это исправить? Стоит ли создавать несколько объектов операторов или пытаться совершать промежуточные действия между каждой командой?

ТИА

Ответы [ 3 ]

2 голосов
/ 26 сентября 2011

Похоже, ошибка при вызове метода execute.Другой метод Statement#executeUpdate должен использоваться для запросов DDL.См. официальный javadoc .

Обновление: Вы пытались использовать метод executeBatch?Я пытаюсь выполнить пакет, используя spring jdbc :

getJdbcTemplate().batchUpdate(new String[] { createTable, createTrigger, insert });

, он прекрасно работает для меня.

1 голос
/ 26 сентября 2011

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

0 голосов
/ 09 октября 2011

Спасибо за ввод.

У меня было 2 проблемы.Ошибка «таблица или представление не существует» была устранена путем создания нового оператора для каждого запускаемого мной SQL + с использованием метода executeUpdate вместо метода execute.

Затем возникла проблема с недействительным триггером - поэтому яубедитесь, что все имена триггеров / таблиц / индексов используются в верхнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...