PostgreSQL用C完成存儲過程例子
目的:用C完成一個存儲過程例子,存儲過程實現對表某一段進行update。
準備工作
1、安裝數據庫
2、建立表test
highgo=# create table test(id int, name text, label int); CREATE TABLE
3、建立C文件,C代碼如下:
#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編譯
gcc -fpic -I/opt/HighGo/db/20150401/include/postgresql/server/ -shared -o myapi.so myapi.c
5、復制到lib目錄下
cp myapi.so /opt/HighGo/db/20150401/lib/postgresql/
6、加載到服務器
highgo=# load 'myapi'; LOAD
7、建立函數
highgo=# create function mydele(integer) returns integer as '$libdir/myapi.so','mydelete' language c strict; CREATE FUNCTION highgo=#
8、效果
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
來自:http://my.oschina.net/Suregogo/blog/406798
本文由用戶 d3fw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!