?? postgresql-howto-23.html
字號:
New York, NY 10018 USA Phone (sales): +1.212.642.4900</PRE></CODE></BLOCKQUOTE>除 SQL-92 標(biāo)準(zhǔn)外,現(xiàn)在還有一份技術(shù)正誤表 (Technical Corrigendum) (除錯)∶<BLOCKQUOTE><CODE><PRE> * Technical Corrigendum 1:1994 to ISO/IEC 9075:1992</PRE></CODE></BLOCKQUOTE>TC 1 應(yīng)該可從 ANSI 取得。TC 1 只有 ISO 版本□□它適用于 ISO 和 ANSI 版本的 SQL-92。<P>除標(biāo)準(zhǔn)外,也有關(guān)于 1992 SQL 標(biāo)準(zhǔn)的書。這些書提供一個比實(shí)際標(biāo)準(zhǔn)易理解的描述。<P>有關(guān)的標(biāo)準(zhǔn) (Related Standards)<P>SQL 社群也對多個其他標(biāo)準(zhǔn)有興趣。這節(jié)包括一些有關(guān)這些努力的指針。當(dāng)更多資料在網(wǎng)上出現(xiàn)後,這個名單也會更長。<P><UL><LI> SQL Environments (FIPS 193)</LI><LI> Next Generation Repository Systems (X3H4) - 一份呼吁參與 "Developing Standards for the Next Generation Repository Systems" 的新聞稿。</LI></UL><H2><A NAME="ss23.11">23.11 第二部分□ISO/ANSI SQL 基金 (ISO/ANSI SQL Foundation)</A></H2><P>SQL3 努力的一個重要部分在 SQL 基金文件中∶<P><UL><LI> 基本的 SQL/PSM 能力(來自 SQL/PSM-92)</LI><LI> 新的資料型態(tài)</LI><LI> 激發(fā) (Triggers)</LI><LI> 子列表 (Subtables)</LI><LI> 抽像資料型態(tài) (Abstract Data Types, ADT)</LI><LI> 物件導(dǎo)向能力</LI></UL><P>對物件導(dǎo)向能力有數(shù)個先決要求∶<P><UL><LI> 定義復(fù)雜運(yùn)作的能力</LI><LI> 把復(fù)雜的運(yùn)作儲存在資料庫中</LI><LI> 呼叫外部程序 有些不能用 SQL 做到的運(yùn)作,或需要和外面溝通</LI></UL><P>這些能力已定義為 SQL/PSM 的一部分<P>現(xiàn)在有大量工作在煉制 SQL 物件模型,使它和 ODMG 提出的物件模型看齊。這努力在 X3H2 和 ISO DBL 文章中描述過∶容納 SQL3 和 ODMG。在 SQL3/OQL Merger 最近的更新版也可得到。<P>SQL3 時間表<P>有關(guān) SQL3 的工作正在進(jìn)行,但最終標(biāo)準(zhǔn)還有待數(shù)月後才出現(xiàn)。<P><UL><LI> 國際性投票把 SQL3 基礎(chǔ)從草案提升為委員草案 (Committee Draft, CD)在一九九六日秋季進(jìn)行。</LI><LI> 估計(jì)投票會帶來大量評論</LI><LI> 將會需要第二次 CD 投票</LI><LI> Draft International Standard 投票多半會在 1998 年中進(jìn)行</LI><LI> 國際標(biāo)準(zhǔn)可在一九九九年中完成</LI></UL><P>ANSI 版的標(biāo)準(zhǔn)的編排也差不多。<H2><A NAME="ss23.12">23.12 第三部分□ISO/ANSI SQL 呼叫級界面 (Call Level Interface)</A></H2><P>SQL/CLI 是一種對 SQL 資料庫的呼叫級界面。它設(shè)計(jì)為支持包裹 (shrink-wrapped) 的應(yīng)用程序。CLI 原本由 SQL Access Group (SAG) 的一個小組委員會創(chuàng)造。 SAG/CLI 規(guī)格在 1992 年以微軟 Open DataBase Connectivity (ODBC) 規(guī)格公布。一九九三年,SAG 把 CLI 提交到 ANSI 和 ISO SQL 委員會中。(SQL Access Group 現(xiàn)已結(jié)合到 X/Open consortium 中。)<P>SQL/CLI 提供了以下事項(xiàng)的國際標(biāo)準(zhǔn)∶<P><P><UL><LI> 獨(dú)立于實(shí)踐方法的 CLI 來存取 SQL 資料庫</LI><LI> 主從工具 (Client-server tools) 可輕易籍動態(tài)鏈結(jié)函式庫存取資料庫</LI><LI> 支持及鼓勵豐富的主從工具</LI></UL><P>SQL/CLI 時間表<P>對標(biāo)準(zhǔn)的開發(fā)過程,SQL/CLI 正以驚人的速度處理中。<P><UL><LI> SQL/CLI 是對 1992 SQL 標(biāo)準(zhǔn)(SQL-92)的補(bǔ)遺</LI><LI> 一九九五年完成,成為 ISO 標(biāo)準(zhǔn)</LI><LI> ISO/IEC 9075-3:1995 Information technology -- Database languages -- SQL-- Part 3: Call-Level Interface (SQL/CLI)</LI><LI> 目前 SQL/CLI 正努力加上 SQL3 功能</LI></UL><H2><A NAME="ss23.13">23.13 第四部分□ ISO/ANSI SQL 持久儲存模塊 (Persistent Stored Modules)</A></H2><P>SQL/PSM 籍以下功能擴(kuò)充 SQL∶<P><UL><LI> 程序語言 (Procedural language) 延伸</LI><LI> 復(fù)句 (Multi-statement) 和儲存程序</LI><LI> 外部函數(shù)與程序呼叫 (External function and procedure calls)</LI></UL><P>除作為有價值的應(yīng)用程序開發(fā)工具,SQL/PSM 為 SQL3 提供了物件導(dǎo)向能力的基礎(chǔ)支持。<P>復(fù)句和儲存程序<P>復(fù)句和儲存程序?yàn)橹鲝沫h(huán)境提供多種好處∶<P><UL><LI> 表現(xiàn)□由于儲存程序可執(zhí)行多句 SQL 語句,與客戶經(jīng)網(wǎng)絡(luò)的溝通可減少。</LI><LI> 保安□用者可以有權(quán)利經(jīng)儲存程序更新一個或多個列表,但沒權(quán)直接更新。</LI><LI> 分享程序碼□不需每個存取資料庫客戶工具都重寫和重試儲存程序的程式碼。</LI><LI> 控制□為應(yīng)用程序的執(zhí)行提供單一的定義和控制。</LI></UL><P>程序語言延伸<P>程序語言籍流向控制和其他編程技巧為 SQL 加上傳統(tǒng)程序語言的功能。<P>流向控制語句<P><UL><LI> If-then-else</LI><LI> 回圈結(jié)構(gòu) (Looping constructs)</LI><LI> 例外處理 (Exception handling)</LI><LI> Case 語句</LI><LI> Begin-End 區(qū)塊</LI></UL><P>程序語言延伸還包括其他編程技巧∶<P><UL><LI> 變數(shù)宣告</LI><LI> Set 語句,用于賦值 (assignment)</LI><LI> 取得程序和狀態(tài)的資料</LI></UL><P>此外,所有傳統(tǒng) SQL 語言都可包含在多句的程序中。<P>外部函數(shù)與程序呼叫<P>一個經(jīng)常在大量資料庫產(chǎn)品的 wish lists 中出現(xiàn),而有部分實(shí)踐到的特色,是呼叫用者所寫,在資料庫軟件外的程序。<P><UL><LI> 容許某個電腦式應(yīng)用程序加上自己的資料庫函數(shù)</LI><LI> 可在整個資料庫應(yīng)用程序使用</LI></UL><P>這功能的好處是它讓資料庫(因此包括資料庫應(yīng)用程序)使用豐富的程序和函數(shù),數(shù)量多得不能由一個標(biāo)準(zhǔn)組織定出。<P>SQL/PSM 時間表<P>SQL/PSM 發(fā)展迅速∶<P><UL><LI> SQL/PSM 是 SQL-92 的補(bǔ)遺</LI><LI> 有關(guān)把 SQL/PSM 從國際標(biāo)準(zhǔn)的草案變?yōu)閲H標(biāo)準(zhǔn)的國際投票在一九九六年一月完成。</LI><LI> 一九九六年五月的編輯會議未能解決所有評論</LI><LI> PSM 編輯會議安排于一九九六年九月三十日至十月四日期間重開</LI><LI> 安排緊迫,但 PSM 有可能在一九九六年間出版</LI><LI> 官方任命為∶ISO/IEC DIS 9075-4:199? Information technology -- Database languages --SQL -- Part 4: SQL Persistent Stored Modules (SQL/PSM)</LI><LI> 現(xiàn)正為 SQL3 加上 SQL/PSM 支持工作。</LI></UL><H2><A NAME="ss23.14">23.14 第五部分□ ISO/ANSI SQL/結(jié)合 (Bindings)</A></H2><P>為方便參考,程序語言的結(jié)合被抽出成獨(dú)立的文件。目前的版本即是 SQL-92 的動態(tài)和嵌入結(jié)合 (dynamic and embedded bindings) 的節(jié)錄。<P>程序語言結(jié)合仍有不同的問題有待解決。<P>對傳統(tǒng)程序語言來說,資料型態(tài)和 SQL-92 的可以互相對應(yīng)。不過, SQL 物件和程序語言變數(shù)之間的對應(yīng)必須定義。<P>對物件導(dǎo)向語言來說,目前的 SQL 資料型態(tài)、SQL 物件模型和物件導(dǎo)向程序語言之間的對應(yīng)關(guān)系必須定義。<P>物件模型需在公開這些之前穩(wěn)定下來。<P>語言結(jié)合完成時會成為 SQL3 的一部分。<H2><A NAME="ss23.15">23.15 第六部分□ISO/ANSI SQL XA 界面規(guī)格 (SQL/XA)</A></H2><P>這規(guī)格會為總交易管理員 (global Transaction Manager) 和 SQL 資源管理員 (SQL Resource Manager) 之間應(yīng)用程序界面 (API) 提供標(biāo)準(zhǔn)。它會根據(jù) ISO/IEC 10026 的內(nèi)容,“分散交易處理 (Distributed Transaction Processing)”標(biāo)準(zhǔn)化函數(shù)呼叫,SQL 資源管理員會用以支持分二階段的確定 (two-phase commit)?;A(chǔ)的文件是自經(jīng) X/Open 批準(zhǔn)而來自一份 X/Open 出版物,它清楚的指明 xa_close, xa_commit, xa_complete, xa_end, xa_forget, xa_open, xa_prepare, xa_recover, xa_rollback和 xa_start 等多個函數(shù),以 SQL 資料型態(tài)的輸入和輸出參數(shù)的語法。<P>ISO 目前正嘗試盡快追上 (fast-tract) X/Open XA 規(guī)格。這個過程不經(jīng)改變采用一個目前的業(yè)界規(guī)格。以 ISO SC21,JTC 1 等級的 XA 盡快追上投票在一九九五年四月二十七日開始,一九九五年十月二十七日結(jié)束。如果 XA 規(guī)格經(jīng) 75% 票數(shù)和 2/3 的 JTC 1 p-members 批準(zhǔn),它會成為一個國際標(biāo)準(zhǔn)。如果經(jīng)盡快追上投票批準(zhǔn),SQL/XA 可在 1996 年成為標(biāo)準(zhǔn)。<H2><A NAME="ss23.16">23.16 第七部分□時態(tài) ISO/ANSI SQL </A></H2><P>時態(tài) SQL 處理和時間有關(guān)的資料。其概念是查詢資料而知道它在一個特定時間的情況是有用的。時態(tài) SQL 是一份由 Rick Snodgrass 在一九九四年十二月所寫,描述這概念的文件。<P>X3 宣布確認(rèn)一個新計(jì)劃,ISO/IEC 9075 Part 7:SQL/Temporal 是一份關(guān)于 SQL/Temporal 的新聞稿<BLOCKQUOTE><CODE><PRE>---------------------------------------------------------------------------- Temporal SQL ************Rick Snodgrass(TSQL2 委員會主席)31-Dec-1994</PRE></CODE></BLOCKQUOTE>不多人問過關(guān)于 SQL 3 對附加時間支持的問題(如在 DBL R10-75 提議,要求 SQL 有新的部分來處理時間性的資料庫)。其論點(diǎn)是抽象資料形態(tài) (ADT's) 足以支持時態(tài)。在這信息性的項(xiàng)目,我使用具體例子來論證擁有抽象資料形態(tài)的欄位不能處理時態(tài)查詢。特別來說,很多時間性的查詢不是很難用 SQL 模擬,就是需在過程語言中使用嵌入式 SQL。其他選擇在 TSQL2,一個對 SQL-92 的時態(tài)延伸中提出了。<H3>導(dǎo)言</H3><P>有效時間 (Valid-time) 的支持超出一個時態(tài) ADT 的能力。使用後者,一個欄位被指定為時態(tài)領(lǐng)域,如 DATE 或 INTERVAL(稍後會有例子)。籍著有效時間,表格的每行隨著時間改變,因?yàn)閷?shí)際上改變了。聯(lián)系到一個有效時間表格的某行的時間戳記 (timestamp),會被查詢語言理解為該行中各欄數(shù)值的組合有效的時間。這個無須言明的時間戳記使得查詢可以簡單易明地表達(dá)出來。<H3>個案研究□儲存現(xiàn)時資料</H3><P>The University of Arizona 的 Office of Appointed Personnel 在資料庫中有些資料,包括雇員名字、目前薪金和目前職位。這些可用一個簡單的表格表達(dá)出來。<BLOCKQUOTE><CODE><PRE> Employee(Name, Salary, Title)</PRE></CODE></BLOCKQUOTE>使用這個表格尋找一個雇員的薪金十分簡單。<BLOCKQUOTE><CODE><PRE> SELECT Salary FROM Employee WHERE Name = 'Bob'</PRE></CODE></BLOCKQUOTE>現(xiàn)在 OAP 想再記錄出生日期。為些,在表格中加了一欄,產(chǎn)生以下綱目 (schema)∶<BLOCKQUOTE><CODE><PRE> Employee(Name, Salary, Title, DateofBirth DATE)</PRE></CODE></BLOCKQUOTE>找尋一名雇員的出生日期個尋找薪金類似。<BLOCKQUOTE><CODE><PRE> SELECT DateofBirth FROM Employee WHERE Name = 'Bob'</PRE></CODE></BLOCKQUOTE><H3>個案研究□儲存歷史資料</H3><P>OAP 想把受雇歷史電腦化。為此,他們加上兩欄,一欄指出表示此行的資料何時開始有效,另一指出資料何時失效。<P>Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)<P>以資料模型 (data model) 說,這些新欄位和 DateofBirth 毫無分別。不過,它們的存在產(chǎn)生多種結(jié)果。<H3>個案研究□投映 (Projection)</H3><P>要找出雇員目前的薪金會較為困難。<BLOCKQUOTE><CODE><PRE> SELECT Salary FROM Employee WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop</PRE></CODE></BLOCKQUOTE>這句查詢比之前的復(fù)雜。元兇很明顯是新增的兩欄。OAP 想發(fā)出薪金歷史給各員工。特別地,有需要找出每一名雇員在收受一個薪酬的最長時間。不幸地,用 SQL 不能做到。一名雇員在薪酬調(diào)整期間職銜可有多次變更。<BLOCKQUOTE><CODE><PRE>Name Salary Title DateofBirth Start Stop---- ------ ----- ----------- ----- ----Bob 60000 Assistant Provost 1945-04-09 1993-01-01 1993-05-30Bob 70000 Assistant Provost 1945-04-09 1993-06-01 1993-09-30Bob 70000 Provost 1945-04-09 1993-10-01 1994-01-31Bob 70000 Professor 1945-04-09 1994-02-01 1994-12-31 圖 1</PRE></CODE></BLOCKQUOTE>要注意有三行 Bob 的薪金停留在 $70,000。所以,結(jié)果應(yīng)該是 Bob 有兩行。<BLOCKQUOTE><CODE><PRE>Name Salary Start Stop---- ------ ----- ----Bob 60000 1993-01-01 1993-05-30Bob 70000 1993-06-01 1994-12-31</PRE></CODE></BLOCKQUOTE>另一方法是把薪金和職級資料印給用者,而由用者找出他的薪酬何時變更。這方法既不吸引,亦不實(shí)際。另一方法是盡量使用 SQL。<BLOCKQUOTE><CODE><PRE>CREATE TABLE Temp(Salary, Start, Stop)AS SELECT Salary, Start, Stop FROM Employee;</PRE></CODE></BLOCKQUOTE>重覆
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -