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)
|
===更多相關=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |