?
本文檔使用
php中文網(wǎng)手冊(cè) 發(fā)布
PostgreSQL類(lèi)型系統(tǒng)包含一系列特殊用途的條目, 它們按照類(lèi)別來(lái)說(shuō)叫做偽類(lèi)型。偽類(lèi)型不能作為字段的數(shù)據(jù)類(lèi)型, 但是它可以用于聲明一個(gè)函數(shù)的參數(shù)或者結(jié)果類(lèi)型。 偽類(lèi)型在一個(gè)函數(shù)不只是簡(jiǎn)單地接受并返回某種SQL數(shù)據(jù)類(lèi)型的情況下很有用。 Table 8-24列出了所有的偽類(lèi)型。
Table 8-24. 偽類(lèi)型
名字 | 描述 |
---|---|
any | 表示一個(gè)函數(shù)接受任何輸入數(shù)據(jù)類(lèi)型 |
anyarray | 表示一個(gè)函數(shù)接受任意數(shù)組數(shù)據(jù)類(lèi)型 (參閱Section 35.2.5) |
anyelement | 表示一個(gè)函數(shù)接受任何數(shù)據(jù)類(lèi)型 (參閱Section 35.2.5) |
anyenum | 表示一個(gè)函數(shù)接受任意枚舉數(shù)據(jù)類(lèi)型 (參閱Section 35.2.5 and Section 8.7). |
anynonarray | 表示一個(gè)函數(shù)接受任意非數(shù)組數(shù)據(jù)類(lèi)型 (參閱Section 35.2.5). |
cstring | 表示一個(gè)函數(shù)接受或者返回一個(gè)空結(jié)尾的C字符串 |
internal | 表示一個(gè)函數(shù)接受或者返回一種服務(wù)器內(nèi)部的數(shù)據(jù)類(lèi)型 |
language_handler | 一個(gè)過(guò)程語(yǔ)言調(diào)用處理器聲明為返回 language_handler. |
record | 標(biāo)識(shí)一個(gè)函數(shù)返回一個(gè)未聲明的行類(lèi)型 |
trigger | 一個(gè)觸發(fā)器函數(shù)聲明為返回trigger. |
void | 表示一個(gè)函數(shù)不返回?cái)?shù)值 |
opaque | 一個(gè)已經(jīng)過(guò)時(shí)的類(lèi)型,以前用于所有上面這些用途 |
用C編寫(xiě)的函數(shù)(不管是內(nèi)置的還是動(dòng)態(tài)裝載的)都可以聲明為接受或者返回這樣的偽數(shù)據(jù)類(lèi)型。 在把偽類(lèi)型用做函數(shù)參數(shù)類(lèi)型的時(shí)候,保證函數(shù)行為正常就是函數(shù)作者的任務(wù)了。
用過(guò)程語(yǔ)言編寫(xiě)的函數(shù)只能根據(jù)它們的實(shí)現(xiàn)語(yǔ)言是否可以使用偽類(lèi)型而使用它。 目前,過(guò)程語(yǔ)言都不允許使用偽類(lèi)型作為參數(shù)類(lèi)型, 并且只允許使用void和record作為結(jié)果類(lèi)型 (如果函數(shù)用做觸發(fā)器,那么加上trigger)。 一些多態(tài)的函數(shù)還支持使用anyarray, anyelement,anyenum和anynonarray類(lèi)型。
偽類(lèi)型internal用于聲明那種只能在數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)部調(diào)用的函數(shù), 它們不能直接在SQL查詢(xún)里調(diào)用。 如果函數(shù)至少有一個(gè)internal類(lèi)型的參數(shù), 那么我們就不能從SQL里調(diào)用它。 為了保留這個(gè)限制的類(lèi)型安全,我們一定要遵循這樣的編碼規(guī)則: 不要?jiǎng)?chuàng)建任何聲明為返回internal的函數(shù),除非它至少有一個(gè)internal參數(shù)。