我正在编写一个需要与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的文档:这种在语句中插入C变量的样式可以在任何需要值表达式的地方工作。
如果从字段中复制内容,那么我猜该字段不是一个值表达式。
有什么帮助吗?
thx :-)
发布于 2012-08-06 22:48:31
好吧,那是不可能的。根据这个职位的说法。但是,可以使用预先准备好的语句:
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) ;发布于 2021-09-28 08:54:08
只要单引号,:fileData_name变量根据PostgreSQL文档化
EXEC SQL COPY datas
FROM ':fileData_name'
WITH (FORMAT text, DELIMITER '|') ;https://stackoverflow.com/questions/11767992
复制相似问题