Я пытаюсь выполнить два оператора DML в DB2 с использованием JDBC, и я получаю ошибку синтаксиса:Выполнить два оператора DML в DB2 с использованием JDBC
ALTER TABLE "TEST" ALTER COLUMN "COL1" SET DATA TYPE INT;
ALTER TABLE "TEST" ALTER COLUMN "COL1" SET NOT NULL;
Если я исполняю их один на один все в порядке.
Я пробовал без точек с запятой, только одну точку с запятой в первом выражении. Я также пробовал несколько раз, и я действительно не могу понять, в чем проблема.
Исключением является следующее:
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;
ALTER TABLE "TEST";1" SET DATA TYPE INT;<space>, DRIVER=3.65.77
Кто-нибудь знает, что может быть проблема?
Это не так очевидно ... MySQL, Oracle, PostgreSQL, SQLServer и H2 позволяют. Кроме того, не совсем уверен, но я думаю, что составные операторы не могут использоваться для операторов DML. Но, несмотря на это, я уже пробовал это. – rpvilao
«_MySQL, Oracle, PostgreSQL, SQLServer и H2 allow it_» - не верно. Я не собираюсь проверять все эти базы данных для вас, но пытаюсь запустить что-то вроде «altTbl.execute» («alter table test modify» (col1 int); изменить изменение теста таблицы (col1 not null enable) »);' на База данных Oracle вызовет «ORA-00911: недопустимый символ». – mustaccio
Для DB2 он должен быть скомпилированным (не указанным, указанным оператором 'ATOMIC'), а операторы DDL должны выполняться динамически через' EXECUTE IMMEDIATE'. Я соответствующим образом изменил ответ. Этот подход также будет работать в базе данных Oracle. – mustaccio