2

我有以下问题,我正在寻求帮助:我正在使用 swi-prolog 和 odbc 接口连接到 postgresql 数据库。当我尝试插入数据库时​​出现问题。SELECT 工作正常,但 INSERT 不起作用。有谁知道我做错了什么。

这是我的简单测试代码:

:-use_module(library(odbc)).

connect(C):-
  odbc_connect(baza, C, [user(Mat), 
              password(lozinka), alias(baza), open(once)]).

sel(R) :-
    odbc_query(baza,
               'SELECT * FROM pacijent',
               R). 

ins:-
 odbc_query(baza, 'INSERT INTO pacijent (name, surname, passw, number) VALUES ("James", "Bond", 007, 007)').

这是我尝试插入时的错误:

?- ins.
ERROR: ODBC: State S1000: [unixODBC]ERROR:  column "James" does not exist at character 30;
Error while executing the query

我也尝试通过 psql 控制台插入,一切正常,但正如所说的问题是从 prolog 插入时。

请帮忙,我卡在这里。

谢谢

4

2 回答 2

3

一个建议:适当的转义,但不知道是否足够。我会转

"James", "Bond"

进入

\'James\', \'Bond\'
于 2012-08-14T21:49:47.863 回答
1

问题是您已经用双引号而不是单引号传递了列名称和姓氏的列数据。大多数数据库使用 " (双引号)作为标识符,如表和列名,使用 ' (单引号)作为数据。你如何确保在序言中我不知道。

我怀疑您也想引用其他两列。

在 ODBC 中,您将使用 SQLGetInfo 并获取 SQL_IDENTIFIER_QUOTE_CHAR ,这通常会返回双引号,这意味着引用标识符使用这些引号。

于 2012-08-15T08:18:06.790 回答