1

postgresDBと対話する必要がある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 に答える