
# ecpg与Pro\*C兼容性对比
ecpg是GaussDB提供的一种用于C语言程序的嵌入式SQL预处理器，与A数据库Pro\*C预处理器在编译执行命令、语法、嵌入式语句等行为和语义上存在差异。
ecpg与Pro\*C的相关使用差异对比：
- 目前ecpg不支持EXEC SQL CONTEXT ALLOCATE、EXEC SQL CONTEXT USE、EXEC SQL CONTEXT FREE。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  ecpg当前不支持CONTEXT申请、使用、释放操作，ecpg有独立的内存管理机制。多线程模式下，ecpg在每个线程中独立地建立连接、执行SQL语句以及相关资源的释放。这一使用方式与Pro\*C多线程程模式下每个线程各自进行CONTEXT相关申请与释放的处理逻辑一致。
  

- 目前ecpg不支持EXEC SQL COMMIT WORK RELEASE。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  在ecpg中，当业务语句执行COMMIT之后，并没有RELEASE选项，需要通过调用EXEC SQL DISCONNECT、EXEC SQL CLOSE等命令来实现相关资源的释放。Pro\*C中EXEC SQL COMMIT带有RELEASE选项。用于释放程序持有的所有连接、游标等资源信息。
  

- 目前ecpg不支持EXEC SQL ENABLE THREAD。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  ecpg编译选项中开启宏定义，在main函数的.pgc文件中定义（define）ENABLE_THREAD_SAFETY。
  
- 目前ecpg不支持存储过程、Package、匿名块、闪回等特性语法。
 
