概述
什麼是KSQLKSQL對金蝶產品實現多資料庫支持非常重要的基礎引擎。所有與金蝶ERP產品支持的資料庫通訊的應用程式都通過向資料庫伺服器傳送KSQL語句來實現通訊,與應用程式的用戶界面無關。
KSQL是SQL92的子集。它抽取了SQL92的部分語法來滿足金蝶ERP產品的最大功能集合,並隨著金蝶BOS產品的發展逐漸豐富和完善。
1. 一種金蝶自己定義的SQL方言
2. 需要翻譯到具體資料庫廠商的SQL方言
3. KSQL具備的特性,能夠翻譯到我們支持的所有資料庫中
4. 類似於MS SQL SERVER的T-SQL
1. 金蝶BOS平台的多資料庫支持策略
2. 大多數開發人員只熟悉一種資料庫
3. 大多數不同資料庫的方言特性具有共通性,可以抽取為公共的語言特性
4. SQL翻譯效率很高
5. KSQL提供臨時表管理等功能
KSQL規範
KSQL語法規則規範 | 用於 |
大寫 | KSQL 關鍵字或文法終結符(在具體語法子句中予以解釋) |
小寫 | KSQL的語法子句和文法非終結符(在具體語法子句中予以解釋) |
斜體 | KSQL 語法中用戶提供的參數。 |
| (豎線) | 分隔括弧或大括弧內的語法項目。只能選擇一個項目。 |
[ ] (方括弧) | 可選語法項目。不必鍵入方括弧。 |
{}(大括弧) | 必選語法項。不要鍵入大括弧。 |
[ ,...n ] | 表示前面的項可重複 n 次。每一項由逗號分隔。 |
[ ...n ] | 表示前面的項可重複 n 次。每一項由空格分隔。 |
加粗 | 資料庫名、表名、列名、索引名、存儲過程、實用工具、數據類型名以及必須按所顯示的原樣鍵入的文本。 |
<標籤> ::= | 語法塊的名稱。此規則用於對可在語句中的多個位置使用的過長語法或語法單元部分進行分組和標記。適合使用語法塊的每個位置由括在尖括弧內的標籤表示:<標籤>。 |
除非特別申明,否則所有對資料庫對象名的KSQL引用可以是格式如下:
[database_name.] object_name
object_name 引用對象的名稱。
當引用某個特定對象時,不必總是為KSQL指定標識該對象的資料庫實體名稱,也可以直接使用object_name引用某個特定對象,但它要依賴它自己所在的上下文環境。
KSQL數據類型數據類型預覽
數據類型 | 長度 | Sql server | Oracle | Db2 |
CHAR | [1,254] | CHAR[(n)] | CHAR[(n)] | CHAR[(n)] |
varchar | [1,4000] | VARCHAR[(n)] | VARCHAR2(n) | VARCHAR(n) |
nchar | [1,2000] | NCHAR[(n)] | NCHAR[(n)] | ? |
nvarchar | [1,4000] | NVARCHAR[(n)] | NVARCHAR2(n) | |
BINARY | [1,2000] | BINARY[(n)] | RAW( n ) | VARCHAR(n) FOR BIT DATA |
VARBINARY | [1,8000] | VARBINARY[(n)] | LONG RAW | LONG VARCHAR FOR BIT DATA |
BLOB | [1,2G] | IMAGE | BLOB | BLOB(n) |
CLOB | [1,2G] | TEXT | CLOB | CLOB(n) |
NCLOB | [1,1G] | NTEXT | NCLOB | ? |
INT,INTEGER | [-2^31,2~31-1] | INT | NUMBER(38) | INT |
DECIMAL | [-10^31+1,10^31-1] | |||
DATETIME | DATETIME | DATE | DATE TIME TIMESTAMP |
數據類型分類
KSQL支持的數據類型為CHAR , VARCHAR , NCHAR,NVARCHAR,BINARY,VARBINARY, BLOB ,CLOB , NCLOB, INT, INTEGER,DECIMAL ,DATE,TIME DATETIME
數據類型層次結構
字元和二進制字元串大對象
CHAR
VARCHAR
CLOB
UNICODE字元和字元串大對象
NCHAR
NVARCHAR
NCLOB
二制數據類型
BINARY
VARBINARY
二進制大對象
BLOB
精確數字
INT
INTEGER
近似數字 DECIMAL
時間數據類型
日期 DATE
時間 TIME
時間戳DATETIME
數據類型的優先順序
當兩個不同數據類型的表達式用運算符組合後,數據類型的優先順序規則確定哪種數據類型要向另一種轉換。優先順序低的數據類型向優先順序高的數據類型轉換。如果此轉換不是目標資料庫所支持的固有轉換,則返回錯誤。當兩個運算元表達式有相同的數據類型時,運算的結果就為那種數據類型。
下面是KSQL數據類型的優先順序:
CHAR
VARCHAR
NCHAR
NVARCHAR
BINARY
VARBINARY
BLOB
CLOB
NCLOB
DECIMAL
INT
BINARY
VARBINARY
BLOB
CLOB
NCLOB
DECIMAL
INT INTEGER
DATETIME (最高)
運算符號
+(加)
+(正)
-(減)
-(負)
*(乘)
/(除)
=(等於)
>(大於)
<(小於)
>=(大於或等於)
<=(小於或等於)
<>(不等於)
!=(不等於)
――(單行注釋)
//(單行注釋)
/* */(多行注釋)
[ ](通配符 — 需匹配的字元)
[^](通配符字元 — 無需匹配的字元)
_(通配符 — 匹配一個字元)
%(通配符 — 匹配一個或多個字元)
KSQL規定,資料庫名,資料庫別名,數據表名,數據表別名,欄位名,欄位別名,視圖名,視圖別名,索引名,索引別名, 約束名都屬於標識符範圍。
常量一、時間常量
語法
格式 | 含義 |
{d 'yyyy-mm-dd'} | 日期 |
{t 'hh:mm:ss'} | 時間 |
{ts 'yyyy-mm-dd hh:mm:ss'} | 時間戳 |
注釋
時間戳的日期和時間之間只允許出現一個空格分隔設定號。
時間中不支持毫秒。
示例
時間戳:{ts‘2002-07-17 10:51:18’}
日期:{d‘2002-07-17’}
時間:{t‘10:51:18’}
二、字元串常量
語法
[ N | n ] ‘ [ ^’ ] ’
參數
N
指示該字元歘常量為UNICODE字元串。
n
指示該字元歘常量為UNICODE字元串。
注釋
包含在’’中的除’以外的任何字元序列。
示例
合法的字元串常量:‘’, ‘ ‘, ‘ ‘, ‘ ^ ‘, ’hello’等。
合法的UNICODE字元串常量:n‘’, N‘ ‘, N‘ ‘, n‘ ^ ‘, N’hello’等。
不合法的字元串常量:’’’,’’’’’等。
不合法的字元串常量:N’’’,n’’’’’等。