1

我正在编写一个需要与 postgres 数据库交互的 C++ 应用程序。我想使用 COPY 语句初始化表数据。

这是代码:

EXEC SQL BEGIN DECLARE SECTION ;
  const char * fileData_name = file_data_name ;
EXEC SQL END DECLARE SECTION ;

EXEC SQL COPY datas
         FROM :fileData_name
         WITH (FORMAT text, DELIMITER '|') ;

这是来自 ecpg 的错误消息:

ERROR: syntax error at or near ":fileData_name"

根据 postgres文档这种在 SQL 语句中插入 C 变量的方式适用于 SQL 语句中需要值表达式的任何地方。

如果 COPY stuff FROM field,那么我的猜测是该字段不是值表达式。

有什么帮助吗?

谢谢 :-)

4

2 回答 2

0

好吧,这是不可能的……根据这篇文章。但是可以使用准备好的语句:

char * sql_template = 
    "COPY datas FROM '%s' WITH (FORMAT text, DELIMITER '|');" ;
const char * file_name = "myfile.data";
unsigned int sql_command_len = 
    strlen (sql_template) - 2 + strlen (file_name) + 1;

EXEC SQL BEGIN DECLARE SECTION ; 
    char * sql_command = (char*) malloc (sizeof(char)*sql_command_len) ; 
EXEC SQL END DECLARE SECTION ; 

sprintf (sql_command, sql_template, file_name) ;

EXEC SQL PREPARE cpy FROM :sql_command;
EXEC SQL EXECUTE cpy ;
EXEC SQL DEALLOCATE PREPARE cpy ;
free (sql_command) ;
于 2012-08-06T22:48:31.073 回答
0

只需根据PostgreSQL 文档单引号 :fileData_name 变量:

EXEC SQL COPY datas
         FROM ':fileData_name'
         WITH (FORMAT text, DELIMITER '|') ;
于 2021-09-28T08:54:08.627 回答