| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 10. 類型轉換 | Fast Forward | Next |
要插入表中的數值也根據下面的步驟轉換成目標列的數據類型。
值存儲數據類型解析
查找與目標列準確的匹配。
否則,試著將表達式直接轉換成目標類型。 如果已知該兩種類型之間存在一個已注冊的轉換函數, 那麼這樣做就是可以的。如果表達式是一個未知類型文本, 該文本字串的內容將交給目標類型的輸入轉換過程。
如果目標是定長類型(如 char 或聲明了長度的 varchar) 則試著為目標類型找一個測長函數。 測長函數是一個與類型同名的函數,有兩個參數, 第一個參數類型為該類型,第二個參數是integer,並且返回同種類型。 如果找到一個,用之,把該字段聲明的長度做為第二個參數傳遞。
Example 10-6. character 存儲類型轉換
對一個目標列定義為 character(20) 的語句, 下面語句確保存儲值的正確定長:
CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, length(v) FROM vv;
v | length
----------------------+--------
abcdef | 20
(1 row)這裡真正發生的事情是兩個 unknown 文本解析缺省成text, 這樣就允許 || 操作符解析成text連接。 然後操作符的text結果轉換成bpchar ("空白填充的字符型",character類型內部名稱)以匹配目標字段類型。 (不過,因為知道text和bpchar是二進制兼容的,這樣的轉換是隱含的並且實際上不做任何函數調用。) 最後,在系統表裡找到測長函數 bpchar(bpchar,integer) 並且應用于該操作符的結果並存儲字段長。這個類型相關的函數執行所需要的長度檢查和額外的空白填充。