Syntax 使用JDBC在DB2中执行两个DML语句
我试图使用JDBC在DB2中执行两条DML语句,但始终出现语法错误:Syntax 使用JDBC在DB2中执行两个DML语句,syntax,db2,alter-table,dml,Syntax,Db2,Alter Table,Dml,我试图使用JDBC在DB2中执行两条DML语句,但始终出现语法错误: ALTER TABLE "TEST" ALTER COLUMN "COL1" SET DATA TYPE INT; ALTER TABLE "TEST" ALTER COLUMN "COL1" SET NOT NULL; 如果我一个接一个地执行,一切都没问题 我尝试过不使用分号,在第一个语句中只使用一个分号。我还尝试了几个\r\n,但我真的不明白问题出在哪里 例外情况如下: Caused by: com.ibm.db2.jc
ALTER TABLE "TEST" ALTER COLUMN "COL1" SET DATA TYPE INT;
ALTER TABLE "TEST" ALTER COLUMN "COL1" SET NOT NULL;
如果我一个接一个地执行,一切都没问题
我尝试过不使用分号,在第一个语句中只使用一个分号。我还尝试了几个\r\n,但我真的不明白问题出在哪里
例外情况如下:
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
原因:com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2sql错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=;
更改表格“测试”;1“设置数据类型INT;,驱动程序=3.65.77
有人知道可能是什么问题吗?显然,execute()方法只接受一条语句,而不接受由您尝试的语句分隔的多条语句。API文档中明确说明了这一点:“执行给定的SQL语句”
您可以将多个语句包装成一个(单个)复合语句:
begin execute immediate 'alter ...'; execute immediate 'alter ...'; end
这并不是很明显……MySQL、Oracle、PostgreSQL、SQLServer和H2允许这样做。另外,我也不太确定,但我认为复合语句不能用于DML语句。但即使如此,我已经尝试过了。“MySQL、Oracle、PostgreSQL、SQLServer和H2允许这样做。””“不对。我不打算为您测试所有这些数据库,而是尝试运行类似于
altTbl.execute(“altertable test modify(col1 int);alter table test modify(col1 not null enable)”将导致ORA-00911:无效字符
。对于DB2,它必须是一个已编译(非内联,由原子
关键字指示)语句,并且DDL语句必须通过立即执行
动态执行。我相应地修改了答案。这种方法也适用于Oracle数据库。