2

次の問題があり、助けを求めています: postgresql データベースに接続するために swi-prolog と odbc インターフェイスを使用しています。データベースに挿入しようとすると問題が発生します。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コンソールから挿入しようとしましたが、すべて正常に動作しますが、前述の問題はプロローグから挿入する場合です。

助けてください、私はここで立ち往生しています。

ありがとう

4

2 に答える 2

3

提案: 適切なエスケープですが、それで十分かどうかはわかりません。私は変わります

"James", "Bond"

の中へ

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

問題は、列名と名前の列データを一重引用符ではなく二重引用符で渡していることです。ほとんどのデータベースは、テーブル名や列名などの識別子に「(二重引用符)」を使用し、データに「」(一重引用符)を使用します。

他の2列も引用したいと思います。

ODBCでは、SQLGetInfoを使用してSQL_IDENTIFIER_QUOTE_CHARを取得します。これは通常、二重引用符を返します。これは、識別子がこれらの引用符を使用することを意味します。

于 2012-08-15T08:18:06.790 に答える