我正在编写一个需要与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: - )
答案 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) ;