MogDB SQL 類型轉換值存儲
MogDB SQL 類型轉換值存儲
值存儲數據類型解析
查找與目標字段準確的匹配。
試著將表達式直接轉換成目標類型。如果已知這兩種類型之間存在一個已注冊的轉換函數,那么直接調用該轉換函數即可。如果表達式是一個未知類型文本,該文本字符串的內容將交給目標類型的輸入轉換過程。
檢查一下看目標類型是否有長度轉換。長度轉換是一個從某類型到自身的轉換。如果在 pg_cast 表里面找到一個,那么在存儲到目標字段之前先在表達式上應用。這樣的轉換函數總是接受一個額外的類型為 integer 的參數,它接收目標字段的 atttypmod 值(實際上是其聲明長度,atttypmod 的解釋隨不同的數據類型而不同),并且它可能接受一個 Boolean 類型的第三個參數,表示轉換是顯式的還是隱式的。轉換函數負責施加那些長度相關的語義,比如長度檢查或者截斷。
示例
character 存儲類型轉換。對一個目標列定義為 character(20)的語句,下面的語句顯示存儲值的長度正確:
MogDB=# CREATE TABLE tpcds.value_storage_t1 ( ? ?VS_COL1 CHARACTER(20));MogDB=# INSERT INTO tpcds.value_storage_t1 VALUES('abcdef');MogDB=# SELECT VS_COL1, octet_length(VS_COL1) FROM tpcds.value_storage_t1; ? ? ? vs_col1 ? ? ? ?| octet_length----------------------+-------------- abcdef ? ? ? ? ? ? ? | ? ? ? ? ? 20(1 row))MogDB=# DROP TABLE tpcds.value_storage_t1;
說明: 這里真正發(fā)生的事情是兩個 unknown 文本缺省解析成 text,這樣就允許||操作符解析成 text 連接。然后操作符的 text 結果轉換成 bpchar(“空白填充的字符型”, character 類型內部名稱)以匹配目標字段類型。不過,從 text 到 bpchar 的轉換是二進制兼容的,這樣的轉換是隱含的并且實際上不做任何函數調用。最后,在系統(tǒng)表里找到長度轉換函數 bpchar(bpchar, integer, Boolean) 并且應用于該操作符的結果和存儲的字段長。這個類型相關的函數執(zhí)行所需的長度檢查和額外的空白填充。