postgres.ECPG:'COPY datas FROM:file_name'可能吗?

时间:2012-08-01 21:41:36

标签: postgresql

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

以下是代码:

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"

根据帖子documentation这种在SQL语句中插入C变量的方式适用于SQL语句中值表达式的任何位置。

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

任何帮助?

thx: - )

1 个答案:

答案 0 :(得分:0)

嗯,根据this post,这是不可能做到的。但是可以使用准备好的陈述:

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) ;