[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 數據庫 > 其它 > 正文
PostgreSQL7.0手冊-用戶手冊-20. 應用 - ecpg
編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 22:21:12)
ecpg
名稱
ecpg  嵌入的 SQL C 預處理器 

語法
ecpg [ -v ] [ -t ] [ -I include-path ] [ -o outfile ]  file1 [ file2 ] [ ... ]
輸入
ecpg 接受下面命令行參數: 
-v 
打印版本信息. 
-t 
關閉自動事務模式. 
-I path 
聲明一個附加的包含路徑.缺省是 ., /usr/local/include,Postgres 包含路徑是在編譯時定義的(缺省:/usr/local/pgsql/lib)和 /usr/include. 
-o 
聲明 ecpg 應該把它的所有輸出寫到輸出文件裡.如果沒有給出這個選項,則寫到 name.c,假設輸入文件是 name.pgc.如果輸入文件有預期的 .pgc 綴,那輸出文件將在輸入文件附加 .pgc (?不是吧?). 
file 
要處理的文件. 
輸出
ecpg將創建一個文件或者寫到標準輸出(stdout). 
return value 
  
  
  
  

成功完成,ecpg 給 shell 返回一個 0,如果出錯返回 -1.

描述
ecpg 是一個嵌入的用Postgres 和 C 語言的 SQL 預編譯器.她使得用嵌入的 SQL 代碼書寫 C 程序成為可能. 
Linus Tolke (又叫 Linus :)是 ecpg 最初的作者(直到版本 0.2).Michael Meskes 是目前的 ecpg 的維護人員和作者.Thomas Good 是 ecpg 手冊頁最新版本的作者,這個手冊頁也是這份文檔的基礎.

用法
為編譯預編譯
一個嵌入的 SQL 源文件在編譯前必須做預處理: 
ecpg [ -d ] [ -o file ] file.pgc
這裡選項 -d 標志打開調試..pgc 是標識 ecpg 源程序的任意標識. 
你可能需要把預處理輸出重定向到一個文件裡.

編譯和鏈接
假設 Postgres 二進制在 /usr/local/pgsql,你將需要象下面這樣編譯和鏈接你的預處理過的源文件: 
gcc -g -I /usr/local/pgsql/include [ -o file ] file.c -L /usr/local/pgsql/lib -lecpg -lpq
語法

預處理器將包含兩個目錄到源文件裡: 
#include 
#include 
變量定義
在 ecpg 源程序裡的變量定義必須前導: 
EXEC SQL BEGIN DECLARE SECTION;
類似的,變量定義段必須以下面語句結束: 
EXEC SQL END DECLARE SECTION;
注意:在 2.1.0 以前,每個變量都必須在一個獨立的行裡.到了 2.1.0,可以在一行裡定義多個變量: 
char  foo(16), bar(16);
錯誤控制
SQL 交互部分定義如下: 
EXEC SQL INCLUDE sqlca;
注意:sqlca 是小寫.盡管可以使用 SQL 傳統,也就是說,利用大寫字符來區分嵌入的 SQL 和 C 語句,而 sqlca (它包含 sqlca.h 頭文件)必須小寫.這是因為 EXEC SQL 前綴表明這個 INCLUDE 將被 ecpg 分析.ecpg 區分大小寫地檢查頭文件(SQLCA.h 將不會被找到.)考慮大小寫,EXEC SQL INCLUDE 還可以包含其他頭文件.
sqlprint 命令和 EXEC SQL WHENEVER 語句一起使用用以打開整個程序的錯誤控制: 
EXEC SQL WHENEVER sqlerror sqlprint;
和 
EXEC SQL WHENEVER not found sqlprint;
注意:這些並不是 EXEC SQL WHENEVER 語句全部用法的例子.其用法的更多的例子可以在 SQL 手冊裡找到(例如, `The LAN TIMES Guide to SQL' by Groff and Weinberg).
數據庫服務器聯接
一種聯接使用下面語句: 
EXEC SQL CONNECT dbname;
這裡數據庫名稱沒有用引號引起.在 2.1.0 以前,數據庫的名稱要求被單引號引起. 
在聯接語句裡聲明服務器名和端口名也同樣可以.語法時: 

dbname[@server][:port]
或者 
:postgresql://server[:port][/dbname][?options]
查詢
通常,其他應用,如 psql ,可以接受的話SQL 查詢都可以嵌入到你的 C 代碼裡.下面是幾個如何做的例子. 
創建表: 

EXEC SQL CREATE TABLE foo (number int4, ascii char(16));
EXEC SQL CREATE UNIQUE index num1 on foo(number);
EXEC SQL COMMIT;
插入: 
EXEC SQL INSERT INTO foo (number, ascii) VALUES (9999, 'doodad');
EXEC SQL COMMIT;
刪除: 
EXEC SQL DELETE FROM foo WHERE number = 9999;
EXEC SQL COMMIT;
單字段選擇: 
EXEC SQL SELECT foo INTO :FooBar FROM table1 WHERE ascii = 'doodad';
使用遊標選擇: 
EXEC SQL DECLARE foo_bar CURSOR FOR
    SELECT number, ascii FROM foo
    ORDER BY ascii;
EXEC SQL FETCH foo_bar INTO :FooBar, DooDad;
...
EXEC SQL CLOSE foo_bar;
EXEC SQL COMMIT;
更新: 
EXEC SQL UPDATE foo
    SET ascii = 'foobar'
    WHERE number = 9999;
EXEC SQL COMMIT;
注意
沒有 EXEC SQL PREPARE 語句. 
所有結構定義必須列在定義節裡面. 

參閱源文件裡的 TODO 文件獲取更多缺失特性的描述.
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
PostgreSQL7.0手冊-附錄-文檔 (2001-04-21 23:50:44)
PostgreSQL7.0手冊-附錄-日期/時間支持-CVS 倉庫 (2001-04-21 23:48:48)
PostgreSQL7.0手冊-教程 -73. Postgres SQL 高級特性 (2001-04-21 23:45:36)
PostgreSQL7.0手冊-教程 -72. 查詢語言 (2001-04-21 23:44:40)
PostgreSQL7.0手冊-教程 -71. 開始 (2001-04-21 23:42:54)
PostgreSQL7.0手冊-教程 -70. 體系結構 (2001-04-21 23:41:58)
PostgreSQL7.0手冊-教程 -69. SQL (2001-04-21 23:41:23)
PostgreSQL7.0手冊-開發者手冊 -68. 分頁文件 (2001-04-21 23:39:22)
PostgreSQL7.0手冊-開發者手冊 -67. 端接口 (2001-04-21 23:38:34)
PostgreSQL7.0手冊-開發者手冊 -66. gcc 缺省優化 (2001-04-21 23:37:20)

===更多相關===
 

★  樊強制作 歡迎分享  ★