首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PostgreSQL ECPG插入数组

使用PostgreSQL ECPG插入数组
EN

Stack Overflow用户
提问于 2009-08-04 15:53:52
回答 1查看 1.7K关注 0票数 0

我使用的是PostgreSQL 8.4的ECPG。我有一个函数,它接受一个结构,其中包含指向两个动态分配的、“null”整数-terminated数组的指针(在本例中,我将null定义为-1,因为不需要负值,如下所示

代码语言:javascript
复制
#define INT_ARR_NULL -1

struct foobar {
    int * foo;
    int * bar;
};

void init_foobar( struct foobar * fb ) {
    fb->foo = (int*) calloc( 11, sizeof(int) );
    fb->bar = (int*) calloc( 11, sizeof(int) );
    fb->foo[10]=INT_ARR_NULL;
    fb->bar[10]=INT_ARR_NULL;
    int i;
    for( i = 0; i < 10; ++i ) {
        fb->foo[i] = i;
        fb->bar[i] = i;
    }
}

void print_foo( struct foobar * fb ) {
    int * cursor = fb->foo;
    while( *cursor != INT_ARR_NULL ) {
        printf( "%d ", *cursor );
        ++cursor;
    }
}

我包含了print_foo函数来展示数组的正常工作方式。如果我想使用ECPG将这些值插入到PostgreSQL列中的数组中,我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-06 13:39:56

您应该能够从这个示例中获得一些工作,取自ECPG测试套件,并减少一点。我不确定它是否适用于动态大小的数组,但这至少应该给你一个起点。

代码语言:javascript
复制
main (void)
{
EXEC SQL BEGIN DECLARE SECTION;
    int a[10] = {9,8,7,6,5,4,3,2,1,0};
    char text[25] = "klmnopqrst";
EXEC SQL END DECLARE SECTION;

    EXEC SQL END DECLARE SECTION;

    EXEC SQL CONNECT TO REGRESSDB1;

    EXEC SQL SET AUTOCOMMIT = ON;

    EXEC SQL BEGIN WORK;

    EXEC SQL CREATE TABLE test (f float, i int, a int[10], text char(10));

    EXEC SQL INSERT INTO test(f,i,a,text) VALUES(404.90,3,'{0,1,2,3,4,5,6,7,8,9}','abcdefghij');

    EXEC SQL INSERT INTO test(f,i,a,text) VALUES(140787.0,2,:a,:text);

    EXEC SQL COMMIT;
}

如果你不能让它与动态数组一起工作,你总是可以将它转换成一个格式为'{1,2,3,4,5}‘的字符串并插入它(参见示例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1228341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档