2017-07-31 179 views
1

我无法在单个事务中运行SQL个查询。这里是我的查询:@AdHoc程序不执行多个语句

DROP TABLE DevicePing IF EXISTS; 

CREATE TABLE DevicePing (DeviceId INTEGER ,RideId BIGINT ,Latitude FLOAT ,Longitude FLOAT ,Speed FLOAT ,Bearing FLOAT ,Angle FLOAT ,HorizontalError FLOAT ,VerticalError FLOAT ,Temprature FLOAT ,Ignition TINYINT ,Motion TINYINT ,RelayState TINYINT ,TIMESTAMP BIGINT); 

我发现,只有第一个查询执行,而其他没有。鉴于关于@AdHoc的文档解释它可以执行多个查询。 什么问题?

回答

1

VoltDB不允许一个目的是在同一事务或批次内被丢弃和创建(如果使用分批DDL语句)。如果您担心此更改可能会对其他事务造成干扰,则应在进行此更改之前暂停数据库,然后恢复数据库。

如果您有使用此表的任何存储过程,他们需要首先被丢弃,然后才能删除该表。然后可以在您再次创建表格后重新创建它们。如果多个过程或视图依赖于此表,并且您尝试最大限度地减少批次数量,则可能会发现可以使用一个批次来删除所有内容(从过程,视图和表格开始)和另一批次以再次创建所有内容(启动与表,索引,视图,然后程序)。如果您需要一个幂等DDL脚本,您可以遵循这种模式,如果您经常进行模式更改并且不需要保留任何数据,则可以节省开发时间。

另一种选择,这取决于你正在什么类型的变化,你可能能够使用ALTER TABLE