我正在尝试编写一个简单地删除表的查询。
let drop_table dbh table_name =
let query = String.concat " " ["drop table"; table_name] in
PGSQL(dbh) query我从查询中收到以下错误
File "save.ml", line 37, characters 10-11:
Parse error: STRING _ expected after ")" (in [expr])
File "save.ml", line 1:
Error: Preprocessor error我为什么要犯这个错误?该函数似乎是有效的Ocaml语法。
谢谢你们!
发布于 2013-08-13 15:09:51
当使用PG‘’OCaml的语法扩展时,不能构造query。您必须提供一个文字字符串。这是获得PG‘’Ocaml编译时查询验证的折衷方法。如果query可以是任何OCaml表达式,PG'OCaml将不知道如何在编译时验证它。
就我个人而言,我已经完全停止使用语法扩展了。我的感觉是,它不会扩大到大型项目。相反,我直接调用prepare和execute。例如,该函数将创建一个新的数据库连接(假设先前定义了连接参数),运行给定的查询,并关闭连接:
let exec query =
let db = PGOCaml.connect ~host ~user ~database ~port ~password ()
PGOCaml.prepare db ~query ();
let ans = PGOCaml.execute db ~params:[] () in
PGOCaml.close db;
ans当然,这不是一个健壮的实现,不应该在生产代码中使用。它不处理错误,也不是异步的。
https://stackoverflow.com/questions/18212342
复制相似问题