Pgocaml自定义sql查询
我正在尝试编写一个只删除一个表的查询Pgocaml自定义sql查询,ocaml,Ocaml,我正在尝试编写一个只删除一个表的查询 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]) Fil
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语法
谢谢大家 使用PG'OCaml的语法扩展时,不能构造
查询。必须提供文字字符串。这是获得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
当然,这不是一个健壮的实现,不应该在生产代码中使用。它不处理错误,也不是异步的。当使用PG'OCaml的语法扩展时,不能构造查询。必须提供文字字符串。这是获得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
当然,这不是一个健壮的实现,不应该在生产代码中使用。它不处理错误,也不是异步的。您能给我一个您正在使用的查询示例,然后告诉我如何编译它吗?在我提出的问题的背景下,这将是惊人的!你能给我一个你正在使用的查询的例子,然后你是如何编译它的?在我提出的问题的背景下,这将是惊人的!