引言
一个嵌入式 SQL 程序由一种普通编程语言编写的代码(在这里是 C)和位于特殊标记的小节中的 SQL 命令混合组成。要构建该程序,源代码(*.pgc
)首先会通过嵌入式 SQL 预处理器,它会将源代码转换成一个普通 C 程序(*.c
),并且后来它能够被一个 C 编译器所处理。转换过的 ECPG 应用会通过嵌入式 SQL 库(ecpglib)调用 libpq 库中的函数,并且与 PostgreSQL 服务器使用普通的前端/后端协议通信。
参考
我们可以使用下列语句连接到一个数据库:EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];target可以用下列方法指定:dbname[@hostname][:port]tcp:postgresql://hostname[:port][/dbname][?options]unix:postgresql://hostname[:port][/dbname][?options]一个包含上述形式之一的 SQL 字符串到一个包含上述形式之一(参见例子)的字符变量的引用DEFAULTEXEC SQL CONNECT TO mydb@sql.mydomain.com;EXEC SQL CONNECT TO unix:postgresql://sql.mydomain.com/mydb AS myconnection USER john;EXEC SQL BEGIN DECLARE SECTION;const char *target = "mydb@sql.mydomain.com";const char *user = "john";const char *passwd = "secret";EXEC SQL END DECLARE SECTION;...EXEC SQL CONNECT TO :target USER :user USING :passwd;/* 或者 EXEC SQL CONNECT TO :target USER :user/:passwd; */
实验
建表语句测试表create database test;create test (id int);test.pgc #扩展名.pgc##内容###include <stdio.h>#include <stdlib.h>int main ( void ){EXEC SQL BEGIN DECLARE SECTION;char *target="test@127.0.0.1:5432";char *user="postgres";char *passwd="123456";int pid;EXEC SQL END DECLARE SECTION;exec sql connect to :target user :user using :passwd;if (sqlca.sqlcode == 0 )printf("connect sucesess ... \n");else {printf("connect faild ... ... \n");exit(0);}printf("add ... \n");exec sql begin;exec sql insert into test(id) values(1);exec sql commit;printf("query ... \n");exec sql select id into :pid from test;printf(" pid = %d \n",pid);}Makefile文件内容TARGET = test #pgc文件名CC = gccCFLAGS = -g -O2 -c -fPIC -DDEBUGECPG = ecpg -cAR = ar -rcvlRANLIB = ranlibINCLDIR = -I. -I/opt/pgsql124/include/ # 改成当前环境实际路径 libecpg.so.6LIBDIR = -L. -L$(HOME)/lib -L/opt/pgsql124/lib/ # 改成当前环境实际路径 libpgtypes.so.3LIBS = -lecpgOBJ =all:$(TARGET)clean:rm -f $(TARGET) *.o core.* .*.swptest:test.o #pgc文件名$(CC) -o $@ $^ $(LIBDIR) $(LIBS)# ################################################################################.SUFFIXES:.SUFFIXES:.c .o .pgc.pgc.c:$(ECPG) $(INCLUDE) $<.c.o:$(CC) $(CFLAGS) $(INCLDIR) $<
参考
http://postgres.cn/docs/13/ecpg-connect.html
文章转载自CP的PostgreSQL厨房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




