SQL-92标准 中文翻译
轉自:
鳳舞于九天,棲于桫欏,涅槃 http://blog.sina.com.cn/suoluosoul,后面還有寸身無恙的BLOG相關內容理解,記錄于此,以后繼續
前言
ISO(國際標準化組織)是一個由國家標準機構(ISO成員機構)構成的世界性的聯邦。通常由ISO技術委員會開展籌備國際標準的工作。如果成員機構關注的某個主題成立了技術委員會,那么成員機構有權派代表參加該委員會。與ISO有聯絡的國際組織,政府和非政府組織,也參與工作。在所有電工標準化的問題上,ISO與國際電工委員會(IEC )密切合作。
?
被技術委員會采納的國際標準草案將會分發給各成員機構尋求認可,之后才能由ISO理事會接受為國際標準。按照ISO規程,需要參加表決的成員機構中至少75%贊成,該草案才能通過。
?
國際標準ISO / IEC 9075:1992出自聯合技術委員會ISO / IEC JTC1 ,信息處理系統。
?
它取消并取代國際標準ISO / IEC 9075:1989 ,DatabaseLanguage-SQL,構成技術性修訂。
?
該國際標準包含了七個告知性的附錄:
- 附錄A (資料): SQL語言的分級;
- 附錄B (資料): 實現定義的要素;
- 附錄C (資料): 實現依賴的要素;
- 附錄D (資料): 不推薦使用的功能;
- 附錄E (資料): 與ISO / IEC 9075:1989的不兼容;
- 附錄F (資料): SQL的維護和解釋。
?
簡介?
該國際標準于1992年被批準。
?
?
該國際標準是從ISO/IEC9075:1989(信息系統,數據庫語言SQL完整性增強)發展而來,并取代了那個國際標準。該國際標準在詳細說明中增加了大量重要的新特性和功能。一般情況下該標準與ISO/IEC9075:1989標準兼容,也就是說,除了極少數例外,符合ISO / IEC9075:1989標準的SQL語言也符合該國際標準,并且在兩者實現上保持一致。在ISO / IEC9075:1989和該國際標準之間,已知的不相容參考告知性附件E “與ISO / IEC 9075:1989的不兼容 ”。
?
?
在ISO/IEC9075:1989和該國際標準之間,技術方面的改變包括現有功能的改進或增強和新功能的定義。現有功能的重要改進有:
-直接調用SQL語言的更好的定義;
-改進的診斷能力,特別是新的狀態參數( SQLSTATE ) ,診斷領域,并支持報表。
?
?
重要的新特性有:
1)???????支持更多的數據類型(DATE, TIME, TIMESTAMP, INTERVAL, BIT string,variable-length character and bit strings, and NATIONAL CHARACTERstrings),
2)???????除了表示SQL語言本身以外,還支持字符集和更多的排序規則,
3)???????支持更多的標量操作,如連接字符串和取子字符串的字符串操作,日期和時間操作,條件表達式的形成,
4)???????在標量值查詢表達式和表值查詢表達式的使用上,增強了通用性和正交性,
5)???????更多的set操作符(例如,union join, natural join, set difference, and setintersection),
6)???????能夠在方案中定義域,
7)???????支持對方案的操作(特別是DROP和ALTER語句),
8)???????支持在Ada、C、MUMPS語言中嵌入SQL語句(模塊和嵌入式語法),
9)???????更多的權限能力,
10)????更多的引用完整性的能力,包括引用的動作,檢查約束中的子查詢,單獨的斷言,以及用戶控制約束的推遲,
11)????信息方案的定義,
12)????支持SQL語言的動態執行,
13)????支持某些設施所需的遠程數據庫訪問(尤其是連接的管理語句和合格的方案名稱),
14)????支持臨時表,
15)????支持各級事務的一致性,
16)????支持數據類型轉換(各種數據類型使用CAST表達式),
17)????支持滾動游標,
18)????具有標記的能力,以輔助應用程序的可移植性。
?
?
該國際標準的內容組織如下:
1)???????第1條“范圍” ,指定該國際標準的范圍。
2)???????第2條“規范參考” ,通過該國際標準的引用,標識額外的標準。這些標準構成該國際標準的規定。
3)???????第3條“定義,記號,和約定” ,定義了該國際標準中使用的記號和約定。
4)???????第4條“概念” ,給出在SQL定義中用到的概念。
5)???????第5條“詞法要素” ,定義語言的詞法要素。
6)???????第6條“標量表達式”,定義產生標量值的語言要素。
7)???????第7條“查詢表達式”,定義產生數據行和數據表的語言要素。
8)???????第8條“謂詞” ,定義語言的謂詞。
9)???????第9條“數據分配規則” ,指定檢索數據或存儲數據到數據庫的分配規則,和set操作形成規則。
10)????第10條“附加的公用要素” ,定義用于語言各部分的附加的語言要素。
11)????第11條“方案的定義和操縱” ,定義創建和管理方案的能力。
12)????第12條“模塊” ,定義模塊和過程。
13)????第13條“數據操縱” ,定義數據操縱語句。
14)????第14條“事務管理” ,定義SQL事務管理語句。
15)????第15條“連接管理”,定義SQL連接管理語句。
16)????第16條“會話管理” ,定義SQL會話管理語句。
17)????第17條“動態SQL ” ,定義動態執行SQL語句的能力。
18)????第18條“診斷管理” ,定義診斷管理能力。
19)????第19條“嵌入式SQL ” ,定義在某些標準編程語言中嵌入SQL的語法。
20)????第20條“直接調用的SQL ” ,定義了SQL語言的直接調用。
21)????第21條“信息方案和定義方案” ,定義包含方案信息的可視化表。
22)????第22條“狀態碼” ,定義標識SQL語句執行狀態的值和這些值返回的機制。
23)????第23條“一致性” ,定義了符合該國際標準的準則。
24)????附錄A “SQL語言的分級” ,是一個告知性的附錄。它列出了分級的規則,定義了入門級SQL和中級水平SQL。
?
25)????附錄B , “實現定義的要素”,是一個告知性的附錄。它列出了在該國際標準正文中規定的數據庫上的語法、含義或效果是部分或全部實現定義的特性,并描述了在各種情況下執行者應提供的確定信息。
?
26)????附錄C,“實現依賴的要素”,是一個告知性的附錄。它列出了在該國際標準正文中明確規定的數據庫上的含義和效果是實現依賴的特性。
?
27)????附錄D,“不推薦使用的功能”,是一個告知性的附錄。它列出了技術委員會打算將來在該國際標準的修訂版中,不會出現的功能。
?
28)????附錄E,“與ISO / IEC 9075:1989的不兼容”,是一個告知性的附錄。它列出了該國際標準當前版本和ISO / IEC9075:1989標準之間的不兼容 。
?
29)????附錄F,“SQL的維護和解釋”,是一個告知性的附錄。它列出自ISO / IEC 9075:1989采納以來,被ISO / IECJTC1/SC21處理過的SQL解釋和修正。
?
在該國際標準的文本中,條款開始于一個新的奇數頁,并在第5條“詞法要素”到第22條“狀態碼”,子條款開始于新的一頁。任何由此產生的空白空間不是很大。
?
范圍
該國際標準定義了SQL數據的數據結構和基本操作。它提供了SQL數據的創建,獲取,維護,控制,保護的功能。
?
注:該國際標準的構架使用數據管理的關系模型描述(ISO/IEC DIS 10032:1991)。
?
該國際標準規定了對以下幾點的數據庫語言的語法和語義:
-SQL數據的結構和完整性約束的指定和修改,
-SQL的數據和游標的聲明和調用操作,
-數據庫語言過程的聲明,并將其嵌入到標準的編程語言中。
它還指定描述SQL數據的結構和完整性約束的信息方案。
?
該國際標準
-為在多個SQL實現之間的數據定義和編譯單元的可移植性提供載體,
-為多個SQL實現的互連提供載體,
-為在編譯單元中的嵌入式SQL語句,規定了相關語法,否則就需要符合特殊的編程語言標準。它定義符合特定編程語言標準的等效的編譯單元。在這等效的編譯單元中,每個嵌入式SQL語句被一些語句替換,這些語句調用包含了SQL語句的數據庫語言過程,
-規定了直接引用SQL語句的語法。
?
該國際標準在以下幾條中,沒有定義方法或綁定的時間
-數據庫管理系統組件,
-SQL數據定義的聲明,
-SQL過程,
-編譯單元,包含了嵌入式SQL。
?
實現該國際標準可能的環境,還應支持應用程序的編程語言,終端用戶的查詢語言,報告生成系統,數據字典系統,項目庫系統,和分布式通信系統,以及數據庫設計,數據管理,和性能優化等各種工具。
?
規范性引用
下列標準包含的規定構成該國際標準的規定。該版本自發布之時有效。所有的標準都受制于修訂,鼓勵基于該國際標準各方達成協議,調查應用如下所列最新版國際標準的可能性。IEC和ISO的成員維護當前有效國際標準的登記。
- ISO/IEC 646:1991, Information technology-ISO 7-bit codedcharacter set for information interchange.
- ISO/IEC 1539:1991, Information technology-Programminglanguages-Fortran.
- ISO 1989:1985, Programming languages-COBOL. (Endorsement ofANSI X3.23-1985).
- ISO 2022:1986, Information technology-ISO 7-bit and 8-bitcoded character sets-code extension techniques.
- ISO 6160:1979, Programming languages-PL/I (Endorsement of ANSIX3.53-1976).
- ISO 7185:1990, Information technology-Programminglanguages-Pascal.
- ISO 8601:1988, Data elements and interchange formats -Information interchange-Representation of dates and times.
- ISO 8652:1987, Programming languages-Ada. (Endorsement ofANSI/MIL-STD-1815A-1983).
- ISO/IEC 8824:1990, Information technology-Open SystemsInterconnection-Specification of Abstract Syntax Notation One(ASN.1).
- ISO/IEC 9579-2:[1], Information technology - Open SystemsInterconnection - Remote Database Access, Part 2: SQLspecial-ization.
- ISO/IEC 9899:1990, Programming languages - C.
- ISO/IEC 10206:1991, Information technology-Programminglanguages-Extended Pascal.
- ISO/IEC 10646:[1], Information technology-Multiple-octet codedcharacter set.
定義、記號和約定
?
3.1? 定義
為了該國際標準的目的,應用以下定義。
3.1.1? 摘自ISO/IEC10646標準的定義
該國際標準使用的以下條款,摘自ISO/IEC 10646標準:
a)????????character字符
b)???????octet字節
c)???????variable-length coding 可變長度編碼
d)???????fixed-length coding 固定長度編碼
?
3.1.2? 摘自ISO 8601標準的定義
該國際標準使用的以下條款,摘自ISO 8601標準:
a)????????Coordinated Universal Time (UTC)
b)???????date ("date, calendar" in ISO 8601)
3.1.3?該國際標準提供的定義
該國際標準定義以下條款:
?
a)????????可賦值: 值或數據類型的特征。這些值或數據類型可以賦值給特定數據類型的數據實例。
?
b)???????(集合的)基數: 集合中對象數目. 對象可以相同.
?
c)???????字符表: 用于明確的目的和應用的字符的集合。每個字符表都有一個隱含默認的整理序列。
?
d)???????可壓縮性: 字符串數據項的屬性,用于管理如何確定該項的整理序列。
?
e)????????排序規則; 整理序列:對兩個可比較的字符串的排序方法. 每個字符集都有一個默認的整理序列.
?
f)????????可比較: 兩個數據對象的特征,允許一個對象的值和另一個對象的值進行比較。同樣對于數據類型:只有當兩個數據類型的對象可以比較,才能說這兩個數據類型可以比較。
?
g)???????說明符: SQL對象的編碼描述。 它包含了該對象符合SQL實現要求的所有信息。
?
h)???????互異:?如果兩個值,都為空值,或者根據第8.2條?“謂詞比較”,它們相等,就認為這兩個值相同。否則,它們是互異的。在兩行(或部分行)中,只要對應的值有一個是不同的,則認為兩行(或部分行)是互異的。
?
i)?????????重復:?當且僅當兩個或兩個以上的值或行是相同的,才能認為它們是重復的。
?
j)?????????二元運算符:?具有兩個操作數(左操作數和右操作數)的操作符。?在該國際標準中一個二元操作符的例子是"-"——減號操作符,該操作符說明左邊操作數減去右邊操作數。
?
k)???????使用形式:?在字符串中表現字符的約定或編碼。有些使用形式是定長的編碼,有些是可變長度的編碼。
?
l)?????????使用形式轉換:?將字符串從一種使用形式轉換為另一種使用形式的方法。
?
m)?????實現定義:?不同的SQL實現之間可能不同,由實現者詳細說明每個特別的SQL實現。
?
n)???????實現依賴:?不同的SQL實現之間可能不同,不由該國際標準說明,也不要求實現者說明每個特別的SQL實現。
?
o)???????一元操作符:?只有一個操作數的操作符.?在該國際標準中一元算術操作符的一個例子是"-"——負號操作符,該操作符說明操作數為負數。
?
p)???????多重集: 對象的無序集合,對象可以相同,集合可以為空。
?
q)???????n元操作符:?具有多個操作數的操作符。在該國際標準中的n元操作符的例子是COALESCE。
?
r)????????空值 (null): 一個特殊的值或者標志,用來表明不含任何數據值。
?
s)????????持久: ?除非有意去銷毀,否則會一直存在。引用和級聯動作是有意的。SQL事務(見子條款4.28,“SQL事務”)或SQL會話(見子條款 4.30,“SQL會話”)結束時附帶的動作不是有意的。
?
t)?????????多余的重復: ?除了一個以外,其他的重復值或行的多重集。
?
u)???????清單: 見字符表。
?
v)???????序列: 對象的有序集合。對象可以相同。
?
w)?????集: 不同對象的無序集合。該集合可為空。.
?
x)???????SQL-實現: 符合該國際標準的數據庫管理系統。
?
y)???????轉換:?將一個字符表中字符轉換成相同或不同字符表中字符的方法。
?
3.2? 記號
該國際標準中使用的語法符號是BNF 的一種擴展版本 ("Backus Naur Form" or "Backus NormalForm")。
?
???在BNF中,語言的每個語法元素通過一個產生規則定義。產生規則根據由字符,字符串和語法元素組成的規則定義元素。
?
???在該國際標準中使用的BNF的版本,使用以下符號:
?
符號含義
?
<>??尖括號,用于分隔字符串,字符串為語法元素的名稱,SQL語言的非終結符。
?
::=??定義操作符。用在生成規則中,分隔規則定義的元素和規則定義。 被定義的元素位于操作符的左邊,規則定義位于操作符的右邊。
?
[ ]??方括號表示規則中的可選元素。方括號中的規則部分可以明確指定也可以省略。
?
{ }??花括號聚集規則中的元素。在花括號中的規則部分必須明確指定。
?
|????替換操作符。 該豎線表明豎線之后的規則部分對于豎線之前的部分是可替換的。如果豎線出現的位置不在花括號或方括號內,那么它指定對于該規則定義的元素的一個完整替換項。如果豎線出現的位置在花括號或方括號內,那么它指定花括號對或方括號對最里面內容的替換項。
?
. . .省略號表明在規則中省略號應用的元素可能被重復多次。如果省略號緊跟在閉花括號"}"之后,那么它應用于閉花括號和開花括號"{"之間的規則部分。如果省略號出現在其他任何元素的后面,那么它只應用于該元素。
?
!!? 介紹普通英文文本。BNF中沒有表示某語法元素的定義時使用。
?
空格用來分隔語法元素。多個空格和多個換行符被視為單個空格。除了上面所給的特殊用途的符號,在規則中的其它字符和字符串表示其本義。此外,如果定義操作符右邊的符號全部由BNF中的符號組成,那么這些符號僅代表其本義,不需要考慮其特殊含義。
?
花括號對和方括號對內部可以任意嵌套,替換操作符可以出現在嵌套的任何地方。
?
形成任何語法元素實例的字符串可能產生自該元素的BNF定義,產生過程應用以下步驟:
?
1) 對于該元素,選擇在產生規則右邊定義的任意一個選項, 并用該選項替換該元素。
?
2) 替換每個省略號和省略號所應用的一個或多個對象的實例。
?
3) 對于方括號中的字符串部分, 要么刪除括號和括號中的內容,要么將括號轉換為花括號。
?
4) 對于花括號中的字符串部分,對其子字符串應用步驟1至步驟5,然后移除花括號。
?
5) 對于仍然在字符串中的非終結語法元素(如在尖括號中的名稱),應用步驟1至步驟5 。
?
當字符串中不再存在非終結符時,擴展過程(或產生過程)完成。
?
約定
3.3.1? 告知性元素
告知性的注解在該國際標準正文中出現好幾次。 例如:
注: 這是一個注解的例子。
這些注解不屬于該國際標準的規范部分,并且不應聲明符合注解中說明的資料。
3.3.2? 語法元素說明
根據以下指定語法元素:
?
???-? 功能: 對于元素意圖的簡短說明。
???-? 格式: 元素語法的BNF定義。
???-? 語法規則:元素語法屬性的詳細說明,或在BNF中沒有表示的,但該元素必須滿足的附加語法約束的詳細說明,或者兩者兼而有之。
???-? 訪問規則: 管理方案對象訪問的規則的詳細說明,應用在通用規則成功運用之后。
???-? 通用規則:元素運行時效果的詳細說明。多個通用規則用來指定元素效果,所需的效果通過開始第一個通用規則,并在數字序列中應用中獲得,除非規則說明或暗示序列中的改變或規則應用結束。除非應用了特殊規則,否則通用規則在序列的最后一條應用之后終結。
???-? 分級規則:元素如何支持各種級別的SQL的詳細說明。
?
注釋性符號的范圍是定義這些符號的子條款。子條款中,在語法規則,訪問規則或者通用規則中定義的符號可以在其他規則中引用,引用前需先定義。
3.3.3? 信息方案的詳細說明
根據以下指定該國際標準的信息方案對象:
?
???-? 功能: 對于該定義意圖的簡短說明。
???-? 定義: SQL中該對象的定義。
???-? 描述: 對該對象運行值的詳細說明,主要針對定義中不清楚的地方。
?
???在信息方案中定義視圖的定義只用來說明這些可視化表的內容。 這些視圖所基于的實際對象依賴于實現。
3.3.4? 術語的使用
3.3.4.1? 異常
短語“引發異常狀況:”, 用于通用規則和其他顯示語句執行不成功的地方,通用規則應用, 除了子條款 12.3,"<過程>", 和子條款 20.1,"<直接SQL 語句>",可能中止,可獲得診斷信息,語句的執行對SQL數據或方案沒有影響。被異常情況終止的SQL語句的SQL描述符區域的影響,除非通過該國際標準顯式定義,否則依賴于實現。
?
短語“引發完成狀況:”,用于通用規則和其他顯示通用規則的應用沒有中止,可獲得診斷信息;除非同時引發了異常狀況,否則語句執行成功。
?
???語句執行時,可能出現多個情況。多個情況的診斷信息是否可用依賴于實現。
3.3.4.2? 語法包含
在格式中,如果語法元素<B>對于語法元素<A>出現在BNF產生規則的右邊,那么就說<A>恰好包含<B>。如果<A>恰好包含<C>或者<A>恰好包含<B>,而<B>又包含<C>,那么<A>包含<C>。
?
在SQL語言中,如果<A>恰好包含<B>,那么就說<A>的一個實例A1恰好包含<B>的一個實例B1,并且B1的文本是A1文本的一部分。如果<A>的一個實例A1包含C1或者A1恰好包含<B>的實例B1,而B1又包含C1,那么就說A1包含C1。
?
如果A1包含B1并且A1包含<C>的一個實例C1,C1又包含B1,那么就說A1通過中介<C>包含B1。如果A1包含B1并且A1不包含C1,而C1又包含B1,那么就說A1不通過中介<C>包含B1。
?
如果A1包含B1不通過中介A2或者B2,那么就說A1只包含B1。
?
如果<A>包含<B>,那么<B>包含于<A>,<A>對于<B>來說是一個包含的產生符號。如果<A>簡單包含<B>,那么<B>簡單包含于<A>,<A>對于<B>來說是一個簡單包含的產生符號。
?
假設A1是<A>的一個實例,B1是<B>的一個實例。如果<A>包含<B>,那么就說A1包含B1或者B1包含于A1。如果<A>僅包含<B>,,那么就說A1簡單包含B1或者B1簡單包含于A1。
?
???如果A1滿足C,A2滿足C,,但A1不包含A2,那么就說A1在最內部滿足條件C。如果A1滿足C,A2滿足C,但A1不包含于A2,那么就說A1在最外部滿足條件C。
?
如果<A>包含一個<tablename>,<tablename>標志通過<viewdefinition> V定義的視圖,那么<A>一般包含V中的<queryexpression>。如果<A>包含<B>,那么<A>一般包含<B>。如果<A>一般包含<B>,<B>一般包含<C>,那么<A>一般包含<C>。
?
如果A1不通過中介<set functionspecification>或<subquery>包含B1,那么就說A1直接包含B1。
3.3.4.3?條款表示規則要求
在語法規則中,條款應定義符合SQL語言語法的條件。只有當通用規則中指定的行動執行后,這些依賴于方案內容的條件才為真。不符合的SQL格式和語法規則的語言依賴于實現。當嘗試評估訪問或通用規則并且實現既不是處理不符合的SQL語言也不是以不符合的方式處理符合的SQL語言時,如果語法規則規定的任一條件沒有滿足,那么將引發異常狀況:語法錯誤或違反訪問規則(如果這種情況發生在動態SQL語句執行中,那么引發的異常是動態SQL語句的語法錯誤或訪問規則的違反;如果這種情況發生在直接引用SQL語句中,那么引發的異常是直接SQL語句的語法錯誤或訪問規則的違反)。
?
在訪問規則中,條款應定義滿足通用規則成功應用的條件。當通用規則應用時,如果任一這種條件沒有滿足,那么將引發異常狀況:語法錯誤或違反訪問規則。
?
在分級規則中,條款應定義符合指定級別的SQL語言的條件。
3.3.4.4?規則評估次序
一個相符的實現并不需要執行在一般規則中定義的精確的行動次序,但是在SQL數據和方案上應達到相同的效果。該條款是用來有效地強調行動的效果可以通過實現的不同方式達到。
?
???包含和被包含的語法元素的語法規則和訪問規則語法元素同時有效應用。包含和被包含的語法元素的一般規則應用,被包含的應用在前,包含的應用在后。當運算符的優先級取決于該國際標準的格式或者圓括號,這些符號通過該優先順序有效地應用。當運算符不取決于該國際標準的格式或者圓括號,表達式有效的評估一般從左至右。然而,表達式是否從左至右評估是依賴于具體實現的,特別是操作數或操作符可能引發情況,或者如果表達式的結果,在沒有完全評估表達式各個部分的前提下,能夠確定。總之,如果一個語法元素包含多個其他的語法元素,那么出現在產生規則前面的語法元素和出現在后面的語法元素一般規則的應用,出現在前面的語法元素早于出現在后面的語法元素。
?
例如,在產生規則中:
???<A> ::=<B><C>
?
???對于<A>,<B>,和<C>語法規則和訪問規則同時有效應用。對于<A>,<B>和<C>的一般規則應用,<C>在<B>之后,<A>在最后。
?
???如果表達式或者搜索條件的結果,在沒有完全評估表達式或者搜索條件各個部分的前提下,能夠確定,那么表達式或者搜索條件非必要的評估部分稱為無關緊要的部分。如果屬于無關緊要部分的訪問規則沒有滿足,那么將引發語法錯誤或違反訪問規則的異常狀況,不管無關緊要部分是否已經評估。如果評估無關緊要部分引發異常,那么該異常是否引發依賴具體實現。
3.3.4.5? 條件規則
條件規則通過“If”或“Case”慣例指定。通過“Case”慣例指定的規則包含一個使用“If”慣例的條件子規則列表。第一個條件成立的“If”子規則是“Case”規則下的有效子規則。“Case”規則下的最后一個子規則應該聲明為“Otherwise”。如果之前的“If”子規則條件都不成立,那么該子規則有效。
3.3.4.6? 語法替代
在語法規則和一般規則中,短語 "X is implicit"表明該語法規則和一般規則將要解釋成元素X已經實際指定。
?
???在語法規則和一般規則中,短語 "the following <X> isimplicit: Y" 表明該語法規則和一般規則將要解釋成已經實際上指定語法元素包含Y 。
?
???在語法規則和一般規則中,短語 "former is equivalent to latter"表明該語法規則和一般規則將要解釋成元素中之前的實例與之后的實例等效。
?
???如果在子條款中引用的BNF非終結符,沒有說明它如何包含在子條款定義的BNF產生過程中,那么
?
??? Case:
???-?如果BNF非終結符是定義在子條款的自身,那么該引用應假定為此BNF非終結符,出現在定義產生規則左邊。
?
???-?否則,該引用應假定為一個恰好包含特殊的BNF非終結符的BNF產生規則。.
?
3.3.4.7? 其他條款
一些語法規則定義條款,如T1,表示命名或沒有命名的表。這些條款用作表名或相互關系名稱。條款用作相互關系名稱,這并不意味著為了命名表而定義任何新的相互關系名稱,也不影響任何實際的相互關系名稱。
?
???一個SQL語句S1的執行是執行SQL語句的直接結果,如果S1是包含在一個已經執行的<procedure>中的SQL語句,或者S1是<SQLstatement variable>的值,<SQL statementvariable>被包含在一個已經執行的<procedure>中的<executeimmediate statement>所引用,或者S1是<SQLstatement variable>的值,其中<SQLstatement variable>通過一個<preparestatement>與一個<SQL statementname>關聯 ,并且<SQL statementname>被包含在一個已執行的<executestatement>所引用。
3.3.5? 描述符
描述符是定義指定類型對象實例屬性的數據的概念結構的集合。描述符的概念用于指定SQL語義。任何數據庫或環境中都不需要描述符以任何特殊的形式存在。
?
一些SQL對象只有在某些SQL對象的背景中才能存在。例如,列只能存在于表中 。這些對象通過描述符獨立描述,啟用對象描述符(如:表)包含被啟用對象的描述符(如:列或表約束)。
?
在其他情況下,某些SQL對象只有在另外一些SQL對象存在的前提下才能存在,即使不存在包含關系。例如,如果斷言引用的表不存在,那么SQL不允許斷言存在。 因此, 斷言描述符依賴于零個或多個表描述符(等效于,斷言依賴于零個或多個表). 一般來說,描述符D1依賴或被依賴于另一個描述符D2。
?
有兩種方式顯示依賴。在許多情況下, 依賴構建描述符包含依賴構建的名稱 。在這種情況下"the name of" 應理解為"sufficient information to identify the descriptorof";因此,實現者可以選擇指針或<catalog name>,<schema name>的串聯等等。此外,描述符可以包含文本(如<query expression>,<search condition>)。在這種情況下,是否在實現中包含文本或它自身風格的解析樹是不相關的;描述符的有效性明確依賴對象提到的描述符的存在。
?
“列基于域”和“列依賴于域”等效。
?
如果一個描述符被其他描述符所依賴,或一個描述符被另一個描述符包含,那么企圖銷毀該描述符很可能會失敗。銷毀一個描述符會導致所有該描述符所包含的描述符被銷毀,但是不影響依賴它的描述符。
3.3.6? 索引排印
在該國際標準的索引中,使用以下約定:
?
???-?以黑體出現的索引條目顯示定義單詞、詞組或者BNF非終結符的頁;
???-?以斜體出現的索引條目顯示在格式中使用BNF非終結符的頁;
???-?以羅馬字體出現的索引條目顯示在標題,函數,語法規則,訪問規則,通用規則,分級規則,表,或其他描述性文本中使用的單詞,詞組或BNF非終結符。
數據庫語言SQL的對象標志符
功能
?
數據庫語言SQL的對象標志符標志在開放的系統環境中對于其他實體SQL實現的特征。
?
格式
?
????????<SQL object identifier> ::=
?????????????<SQL provenance> <SQLvariant>
????????<SQL provenance> ::=<arc1><arc2><arc3>
????????<arc1> ::= iso | 1 | iso<left paren> 1 <rightparen>
????????<arc2> ::= standard | 0 | standard<left paren> 0 <rightparen>
????????<arc3> ::= 9075
????????<SQL variant> ::= <SQLedition> <SQLconformance>
????????<SQL edition> ::=<1987> |<1989> |<1992>
????????<1987> ::= 0 | edition1987<left paren> 0 <rightparen>
????????<1989> ::=<1989 base> <1989package>
????????<1989 base> ::= 1 | edition1989<left paren> 1 <rightparen>
????????<1989 package> ::=<integrity no> |<integrity yes>
????????<integrity no> ::= 0 | IntegrityNo<left paren> 0 <rightparen>
????????<integrity yes> ::= 1 | IntegrityYes<left paren> 1 <rightparen>
????????<1992> ::= 2 | edition1992<left paren> 2 <rightparen>
????????<SQL conformance> ::=<low> |<intermediate> |<high>
????????<low> ::= 0 | Low<left paren> 0 <rightparen>
????????<intermediate>::= 1 | Intermediate <left paren> 1<right paren>
????????<high> ::= 2 | High<left paren> 2 <rightparen>
語法規則
1) 除非<SQLedition>為<1992>,否則<SQLconformance>不會為<high>。
2) <SQL conformance>的值標識符合的級別:
a) 如果 <SQL edition> 指定為<1992>, 那么
?????Case:
??????i) <low>,入門級SQL。
??????ii) <intermediate>, 中級SQL。
??????iii) <high>, 完整級SQL。
??? b)否則:
??????i) <low>, 級別1.
??????ii) <intermediate>, 級別2.
3) <1989package>為<integrityno>,意味著完整性增強功能沒有實現。<1989package>為<integrityyes>,意味著完整性增強功能已經實現。
概念
(數據類型)
?
數據類型是可表示的值的集合。值的邏輯表示是<literal>,物理表示依賴于實現。
?
在該國際標準中,如果一個值沒有任何邏輯細分,那么該值是基元。一個值要么是空值要么是非空值。
?
空值是依賴實現的一個特殊值,有別于所有相關數據類型的非空值。實際上只有一個空值,該空值是每個SQL數據類型的成員。空值沒有<literal>,雖然關鍵詞NULL被用在一些地方,來表明該處需要空值。
?
SQL通過以下<keyword>定義各種數據類型:CHARACTER, CHARACTER VARYING, BIT, BITVARYING, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DOUBLEPRECISION, DATE, TIME, TIMESTAMP, and INTERVAL.
?
子條款 6.1, "<data type>",描述了各種數據類型的語法屬性。
?
為了便于參考,數據類型CHARACTER 和CHARACTER VARYING統稱為字符型字符串類型。 BIT和BITVARYING統稱為位字符串類型。字符型字符串和位字符串統稱為字符串類型。其值為字符串。數據類型NUMERIC, DECIMAL,INTEGER 和SMALLINT 統稱為精確數值類型。數據類型FLOAT, REAL 和DOUBLE PRECISION統稱為近似數值類型。精確數值類型和近似數值類型統稱為數值類型,其值是數字。數據類型DATE,TIME和TIMESTAMP統稱為日期時間類型,其值是日期、時間。數據類型INTERVAL 是間隔類型,其值是間隔。
?
每個數據類型都有一個相關的數據類型描述符。數據類型描述符的內容由具體的數據類型決定。數據類型描述符包括數據類型的識別,所有宿主語言都有它自身的數據類型,獨立于SQL數據類型,盡管可能使用相同的名字來描述數據類型。在子條款12.3,"<procedure>",和子條款19.1,"<embedded SQL hostprogram>"描述了將SQL數據類型映射為宿主語言數據類型。不是每個SQL數據類型在宿主語言中都有其對應的數據類型。
?
(位字符串)
4.3? 位字符串
位字符串是二進制位序列,每個位具有0或1值。位字符串具有長度,長度為字符串中位的個數。長度為0或正整數。
?
??????位字符串數據類型通過其描述符描述。位字符串數據類型描述符包括:
??????????-? 明確的位字符串數據類型名稱(BIT或BIT VARYING);
??????????-? 位字符串數據類型的長度。
4.3.1? 位字符串比較和賦值
所有為字符串都可相互比較。兩個位字符串相等,當且僅當根據子條款8.2, "<comparisonpredicate>"指定的比較它們是相等的。
?????將位字串賦值給位字串變量,源字串中從最重要的位到最不重要的位,到目標字符串最重要的位,一次賦一位。
4.3.2?位字符串操作符
4.3.2.1?位字串操作符和其返回值
字符串
<bitconcatenation>是一個操作符‘|’,返回連接兩個給定次序的位字符串操作對象形成的位字符串。
?????<bit substringfunction>是一個三元函數,語法和語義,除了第一個參數和返回值均為位字符串外,其他與<charactersubstring function>同。
4.3.2.2?其他位字符串操作符
<length expression>返回給定位字符串長度。
??????<positionexpression>確定字符串S1第一次出現在字符串S2的位置。如果S1的長度為0,則對于任何S2,返回1。如果S2中不存在S1,則返回0。
還有寸身無恙的BLOG也有相關內容:
寸身無恙的BLOG
http://blog.sina.com.cn/u/1080755857
http://blog.sina.com.cn/s/articlelist_1080755857_1_1.html
SQL標準介紹:動態SQL
http://blog.sina.com.cn/s/blog_406b0691010006wh.html
SQL標準介紹:嵌入式SQL
http://blog.sina.com.cn/s/blog_406b0691010006wg.html
SQL標準介紹:SQL訪問控制
http://blog.sina.com.cn/s/blog_406b0691010006we.html
SQL標準介紹:SQL數據語句
http://blog.sina.com.cn/s/blog_406b0691010006w2.html
SQL標準介紹:SQL模式語句
http://blog.sina.com.cn/s/blog_406b0691010006w0.html
總結
以上是生活随笔為你收集整理的SQL-92标准 中文翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学USB(三、基础知识3)
- 下一篇: UT-880驱动