首页 > 代码库 > Postgre cannot insert multiple commands into a prepared statement

Postgre cannot insert multiple commands into a prepared statement

悲剧...

FireDAC连接Postgre数据库, 使用默认的属性, 一次执行多条SQL的时候, 会报"cannot insert multiple commands into a prepared statement"这样的错误

到网上查了一下(百度), 什么信息都找不到, 然后又google, 找到很多国外的信息 (此句纯粹为了鄙视百度...各位看官可以忽略)

 

搜啊搜, 大概的意思是, Postgre有2种模式 一种是只能执行一句SQL, 另外一种是支持多SQL批量执行的, 查找过程就忽略的, 总之是各种猜测

 

最后发现Postgre对于执行模式的接口有2个: PQexec和PQexecParams 这个可以在Postgre的帮助文档31.3.1 中找到相关资料

其中PQexec就是支持多个SQL同时执行的, 而PQexecParams则是只支持一句SQL, 他们的区别在于是否支持SQL变量参数值

 

而firedac默认是使用PQexecParams接口来执行的, 所以就会报那个错误, 如果想以PQexec方式执行, 方法如下:

1.FDConnection.ExecSQL

2.设置FDQuery.ResourceOptions.DirectExecute := True;

 

问题解决

Postgre cannot insert multiple commands into a prepared statement