ITPub博客

首页 > > > PostgreSQL用C完成存储过程例子

PostgreSQL用C完成存储过程例子

作者:wangliyun 时间:2020-02-20 18:18:25 0 删除 编辑

目的:用C完成一个存储过程例子,存储过程实现对表某一段进行update。

准备工作

1、安装数据库

2、建立表test

?

1
2
highgo=# create table test(id int, name text, label int);
CREATE TABLE

3、建立C文件,C代码如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "postgres.h"
#include "executor/spi.h"
#include "utils/builtins.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
int mydelete(int key);
int
mydelete(int key)
{
char command[128]; //视命令长短建立相应大小的数组
int ret;
int proc; //对表数据操作的行数
/* 将命令赋值到command */
sprintf(command, "update test set label = 0 where id = %d and label = 1; ", key);
SPI_connect(); //内部链接
ret = SPI_exec( command, 0); //执行操作
proc = SPI_processed; //为行数赋值
SPI_finish(); //中断连接
return (proc); //将操作行数作为返回结果
}

数据库api参考文档:http://www.postgresql.org/docs/9.4/static/spi.html

编译到安装

4、gcc编译

?

1
gcc -fpic -I/opt/HighGo/db/20150401/include/postgresql/server/ -shared -o myapi.so myapi.c

5、复制到lib目录下

?

1
cp myapi.so /opt/HighGo/db/20150401/lib/postgresql/

6、加载到服务器

?

1
2
highgo=# load 'myapi';
LOAD

7、建立函数

?

1
2
3
highgo=# create function mydele(integer) returns integer as '$libdir/myapi.so','mydelete' language c strict;
CREATE FUNCTION
highgo=#

8、效果

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
highgo=# insert into test values (1,'jim',1);
INSERT 0 1
highgo=# insert into test values (2,'tom',1);
INSERT 0 1
highgo=# select * from test;
id | name | label
----+------+-------
1 | jim | 1
2 | tom | 1
highgo=# select mydele(1);
mydele
--------
1
(1 row)
highgo=# select * from test;
id | name | label
----+------+-------
2 | tom | 1
1 | jim | 0




欢迎关注Postgres用户会,微信号:PostgresChina.


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917105/viewspace-3119586/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-19

  • 博文量
    213
  • 访问量
    317