⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 postgresql-howto-23.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
     New York, NY 10018     USA     Phone (sales): +1.212.642.4900</PRE></CODE></BLOCKQUOTE>除 SQL-92 标准外,现在还有一份技术正误表 (Technical Corrigendum) (除错)∶<BLOCKQUOTE><CODE><PRE>   * Technical Corrigendum 1:1994 to ISO/IEC 9075:1992</PRE></CODE></BLOCKQUOTE>TC 1 应该可从 ANSI 取得。TC 1 只有 ISO 版本□□它适用于 ISO 和 ANSI 版本的 SQL-92。<P>除标准外,也有关于 1992 SQL 标准的书。这些书提供一个比实际标准易理解的描述。<P>有关的标准 (Related Standards)<P>SQL 社群也对多个其他标准有兴趣。这节包括一些有关这些努力的指针。当更多资料在网上出现後,这个名单也会更长。<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>   新的资料型态</LI><LI>   激发 (Triggers)</LI><LI>   子列表 (Subtables)</LI><LI>   抽像资料型态 (Abstract Data Types, ADT)</LI><LI>   物件导向能力</LI></UL><P>对物件导向能力有数个先决要求∶<P><UL><LI>   定义复杂运作的能力</LI><LI>   把复杂的运作储存在资料库中</LI><LI>   呼叫外部程序 有些不能用 SQL 做到的运作,或需要和外面沟通</LI></UL><P>这些能力已定义为 SQL/PSM 的一部分<P>现在有大量工作在炼制 SQL 物件模型,使它和 ODMG 提出的物件模型看齐。这努力在 X3H2 和 ISO DBL 文章中描述过∶容纳 SQL3 和 ODMG。在 SQL3/OQL Merger 最近的更新版也可得到。<P>SQL3 时间表<P>有关 SQL3 的工作正在进行,但最终标准还有待数月後才出现。<P><UL><LI>  国际性投票把 SQL3 基础从草案提升为委员草案 (Committee Draft, CD)在一九九六日秋季进行。</LI><LI>  估计投票会带来大量评论</LI><LI>  将会需要第二次 CD 投票</LI><LI>  Draft International Standard 投票多半会在 1998 年中进行</LI><LI>  国际标准可在一九九九年中完成</LI></UL><P>ANSI 版的标准的编排也差不多。<H2><A NAME="ss23.12">23.12 第三部分□ISO/ANSI SQL 呼叫级界面 (Call Level Interface)</A></H2><P>SQL/CLI 是一种对 SQL 资料库的呼叫级界面。它设计为支持包裹 (shrink-wrapped) 的应用程序。CLI 原本由 SQL Access Group (SAG) 的一个小组委员会创造。 SAG/CLI 规格在 1992 年以微软 Open DataBase Connectivity (ODBC) 规格公布。一九九三年,SAG 把 CLI 提交到 ANSI 和 ISO SQL 委员会中。(SQL Access Group 现已结合到 X/Open consortium 中。)<P>SQL/CLI 提供了以下事项的国际标准∶<P><P><UL><LI>   独立于实践方法的 CLI 来存取 SQL 资料库</LI><LI>   主从工具 (Client-server tools) 可轻易籍动态链结函式库存取资料库</LI><LI>   支持及鼓励丰富的主从工具</LI></UL><P>SQL/CLI 时间表<P>对标准的开发过程,SQL/CLI 正以惊人的速度处理中。<P><UL><LI>   SQL/CLI 是对 1992 SQL 标准(SQL-92)的补遗</LI><LI>   一九九五年完成,成为 ISO 标准</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 籍以下功能扩充 SQL∶<P><UL><LI>   程序语言 (Procedural language) 延伸</LI><LI>   复句 (Multi-statement) 和储存程序</LI><LI>   外部函数与程序呼叫 (External function and procedure calls)</LI></UL><P>除作为有价值的应用程序开发工具,SQL/PSM 为 SQL3 提供了物件导向能力的基础支持。<P>复句和储存程序<P>复句和储存程序为主从环境提供多种好处∶<P><UL><LI>   表现□由于储存程序可执行多句 SQL 语句,与客户经网络的沟通可减少。</LI><LI>   保安□用者可以有权利经储存程序更新一个或多个列表,但没权直接更新。</LI><LI>   分享程序码□不需每个存取资料库客户工具都重写和重试储存程序的程式码。</LI><LI>   控制□为应用程序的执行提供单一的定义和控制。</LI></UL><P>程序语言延伸<P>程序语言籍流向控制和其他编程技巧为 SQL 加上传统程序语言的功能。<P>流向控制语句<P><UL><LI>   If-then-else</LI><LI>   回圈结构 (Looping constructs)</LI><LI>   例外处理 (Exception handling)</LI><LI>   Case 语句</LI><LI>   Begin-End 区块</LI></UL><P>程序语言延伸还包括其他编程技巧∶<P><UL><LI>   变数宣告</LI><LI>   Set 语句,用于赋值 (assignment)</LI><LI>   取得程序和状态的资料</LI></UL><P>此外,所有传统 SQL 语言都可包含在多句的程序中。<P>外部函数与程序呼叫<P>一个经常在大量资料库产品的 wish lists 中出现,而有部分实践到的特色,是呼叫用者所写,在资料库软件外的程序。<P><UL><LI>   容许某个电脑式应用程序加上自己的资料库函数</LI><LI>   可在整个资料库应用程序使用</LI></UL><P>这功能的好处是它让资料库(因此包括资料库应用程序)使用丰富的程序和函数,数量多得不能由一个标准组织定出。<P>SQL/PSM 时间表<P>SQL/PSM 发展迅速∶<P><UL><LI>   SQL/PSM 是 SQL-92 的补遗</LI><LI>   有关把 SQL/PSM 从国际标准的草案变为国际标准的国际投票在一九九六年一月完成。</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>   现正为 SQL3 加上 SQL/PSM 支持工作。</LI></UL><H2><A NAME="ss23.14">23.14 第五部分□ ISO/ANSI SQL/结合 (Bindings)</A></H2><P>为方便参考,程序语言的结合被抽出成独立的文件。目前的版本即是 SQL-92 的动态和嵌入结合 (dynamic and embedded bindings) 的节录。<P>程序语言结合仍有不同的问题有待解决。<P>对传统程序语言来说,资料型态和 SQL-92 的可以互相对应。不过, SQL 物件和程序语言变数之间的对应必须定义。<P>对物件导向语言来说,目前的 SQL 资料型态、SQL 物件模型和物件导向程序语言之间的对应关系必须定义。<P>物件模型需在公开这些之前稳定下来。<P>语言结合完成时会成为 SQL3 的一部分。<H2><A NAME="ss23.15">23.15 第六部分□ISO/ANSI SQL XA 界面规格 (SQL/XA)</A></H2><P>这规格会为总交易管理员 (global Transaction Manager) 和 SQL 资源管理员 (SQL Resource Manager) 之间应用程序界面 (API) 提供标准。它会根据 ISO/IEC 10026 的内容,“分散交易处理 (Distributed Transaction Processing)”标准化函数呼叫,SQL 资源管理员会用以支持分二阶段的确定 (two-phase commit)。基础的文件是自经 X/Open 批准而来自一份 X/Open 出版物,它清楚的指明 xa_close, xa_commit, xa_complete, xa_end, xa_forget, xa_open, xa_prepare, xa_recover, xa_rollback和 xa_start 等多个函数,以 SQL 资料型态的输入和输出参数的语法。<P>ISO 目前正尝试尽快追上 (fast-tract) X/Open XA 规格。这个过程不经改变采用一个目前的业界规格。以 ISO SC21,JTC 1 等级的 XA 尽快追上投票在一九九五年四月二十七日开始,一九九五年十月二十七日结束。如果 XA 规格经 75% 票数和 2/3 的 JTC 1 p-members 批准,它会成为一个国际标准。如果经尽快追上投票批准,SQL/XA 可在 1996 年成为标准。<H2><A NAME="ss23.16">23.16 第七部分□时态 ISO/ANSI SQL </A></H2><P>时态 SQL 处理和时间有关的资料。其概念是查询资料而知道它在一个特定时间的情况是有用的。时态 SQL 是一份由 Rick Snodgrass 在一九九四年十二月所写,描述这概念的文件。<P>X3 宣布确认一个新计划,ISO/IEC 9075 Part 7:SQL/Temporal 是一份关于 SQL/Temporal 的新闻稿<BLOCKQUOTE><CODE><PRE>----------------------------------------------------------------------------                                Temporal SQL                                ************Rick Snodgrass(TSQL2 委员会主席)31-Dec-1994</PRE></CODE></BLOCKQUOTE>不多人问过关于 SQL 3 对附加时间支持的问题(如在 DBL R10-75 提议,要求 SQL 有新的部分来处理时间性的资料库)。其论点是抽象资料形态 (ADT's) 足以支持时态。在这信息性的项目,我使用具体例子来论证拥有抽象资料形态的栏位不能处理时态查询。特别来说,很多时间性的查询不是很难用 SQL 模拟,就是需在过程语言中使用嵌入式 SQL。其他选择在 TSQL2,一个对 SQL-92 的时态延伸中提出了。<H3>导言</H3><P>有效时间 (Valid-time) 的支持超出一个时态 ADT 的能力。使用後者,一个栏位被指定为时态领域,如 DATE 或 INTERVAL(稍後会有例子)。籍著有效时间,表格的每行随著时间改变,因为实际上改变了。联系到一个有效时间表格的某行的时间戳记 (timestamp),会被查询语言理解为该行中各栏数值的组合有效的时间。这个无须言明的时间戳记使得查询可以简单易明地表达出来。<H3>个案研究□储存现时资料</H3><P>The University of Arizona 的 Office of Appointed Personnel 在资料库中有些资料,包括雇员名字、目前薪金和目前职位。这些可用一个简单的表格表达出来。<BLOCKQUOTE><CODE><PRE>        Employee(Name, Salary, Title)</PRE></CODE></BLOCKQUOTE>使用这个表格寻找一个雇员的薪金十分简单。<BLOCKQUOTE><CODE><PRE>        SELECT Salary        FROM Employee        WHERE Name = 'Bob'</PRE></CODE></BLOCKQUOTE>现在 OAP 想再记录出生日期。为些,在表格中加了一栏,产生以下纲目 (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 毫无分别。不过,它们的存在产生多种结果。<H3>个案研究□投映 (Projection)</H3><P>要找出雇员目前的薪金会较为困难。<BLOCKQUOTE><CODE><PRE>        SELECT Salary        FROM Employee        WHERE Name = 'Bob' AND Start &lt;= CURRENT_DATE AND CURRENT_DATE &lt;= Stop</PRE></CODE></BLOCKQUOTE>这句查询比之前的复杂。元凶很明显是新增的两栏。OAP 想发出薪金历史给各员工。特别地,有需要找出每一名雇员在收受一个薪酬的最长时间。不幸地,用 SQL 不能做到。一名雇员在薪酬调整期间职衔可有多次变更。<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。所以,结果应该是 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>另一方法是把薪金和职级资料印给用者,而由用者找出他的薪酬何时变更。这方法既不吸引,亦不实际。另一方法是尽量使用 SQL。<BLOCKQUOTE><CODE><PRE>CREATE TABLE Temp(Salary, Start, Stop)AS      SELECT Salary, Start, Stop        FROM Employee;</PRE></CODE></BLOCKQUOTE>重覆

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -