2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

OushuDB 用戶(hù)指南類(lèi)型轉(zhuǎn)換之函數(shù)

 北漂二號(hào) 2021-12-23

在一次函數(shù)調(diào)用中使用的特定函數(shù)由以下幾個(gè)步驟決定。

函數(shù)類(lèi)型解析

  1. 從系統(tǒng)表pg_proc中選擇要考慮的函數(shù)。如果使用了一個(gè)不帶模式修飾的函數(shù)名字, 那么認(rèn)為該函數(shù)是那些在當(dāng)前搜索路徑中名字和參數(shù)個(gè)數(shù)都匹配的函數(shù)(參閱 模式搜索路徑 )。 如果給出一個(gè)帶修飾的函數(shù)名,那么只考慮指定模式中的函數(shù)。

    1. 如果搜索路徑中找到了多個(gè)相同參數(shù)類(lèi)型的函數(shù),那么只考慮最早出現(xiàn)在路徑中的那一個(gè)。 但是不同參數(shù)類(lèi)型的函數(shù)將被平等看待,而不管它們?cè)诼窂街械奈恢萌绾巍?/span>

  2. 查找精確接受輸入?yún)?shù)類(lèi)型的函數(shù)。如果找到一個(gè)(在一組被考慮的函數(shù)中, 可能只存在一個(gè)精確匹配的),則用之。包含unknown類(lèi)型的函數(shù)調(diào)用絕不會(huì)在此處找到匹配。

  3. 如果沒(méi)有找到精確的匹配,則看看函數(shù)調(diào)用是否需要一個(gè)特殊的類(lèi)型轉(zhuǎn)換。 如果函數(shù)調(diào)用只有一個(gè)參數(shù)并且函數(shù)名與某些數(shù)據(jù)類(lèi)型的內(nèi)部名稱(chēng)相同,那么就會(huì)出現(xiàn)這種情況。另外,該函數(shù)的參數(shù)必須是一個(gè)未知類(lèi)型的文本,或者與某個(gè)已命名數(shù)據(jù)類(lèi)型二進(jìn)制兼容。當(dāng)這些條件滿(mǎn)足時(shí),函數(shù)參數(shù)可以在沒(méi)有任何實(shí)際函數(shù)調(diào)用的時(shí)候轉(zhuǎn)換為已命名的數(shù)據(jù)類(lèi)型。

  4. 查找最佳匹配。

a. 拋棄那些輸入類(lèi)型不匹配并且也不能隱式轉(zhuǎn)換成匹配的候選函數(shù)。unknown 文本在這種情況下可以轉(zhuǎn)換成任何東西。如果只剩下一個(gè)候選項(xiàng),則用之,否則繼續(xù)下一步。

b. 遍歷所有候選函數(shù),保留那些輸入類(lèi)型匹配最準(zhǔn)確的。此時(shí), 域被看作和他們的基本類(lèi)型相同。如果沒(méi)有一個(gè)函數(shù)能準(zhǔn)確匹配,則保留所有候選。 如果只剩下一個(gè)候選項(xiàng),則用之,否則繼續(xù)下一步。

c. 遍歷所有候選函數(shù),保留那些需要類(lèi)型轉(zhuǎn)換時(shí)接受(屬于輸入數(shù)據(jù)類(lèi)型的類(lèi)型范疇的) 首選類(lèi)型位置最多的函數(shù)。如果沒(méi)有接受首選類(lèi)型的函數(shù),則保留所有候選。 如果只剩下一個(gè)候選項(xiàng),則用之,否則繼續(xù)下一步。

d. 如果有任何輸入?yún)?shù)是unknown類(lèi)型,檢查剩余的候選函數(shù)對(duì)應(yīng)參數(shù)位置的類(lèi)型范疇。 在每一個(gè)能夠接受字符串類(lèi)型范疇的位置使用string類(lèi)型(這種對(duì)字符串的偏愛(ài)是合適的, 因?yàn)?unknown 文本確實(shí)像字符串)。另外,如果所有剩下的候選函數(shù)都接受相同的類(lèi)型范疇, 則選擇該類(lèi)型范疇,否則拋出一個(gè)錯(cuò)誤(因?yàn)樵跊](méi)有更多線(xiàn)索的條件下無(wú)法作出正確的選擇)。 現(xiàn)在拋棄不接受選定的類(lèi)型范疇的候選函數(shù),然后,如果任意候選函數(shù)在那個(gè)范疇接受一個(gè)首選類(lèi)型, 則拋棄那些在該參數(shù)位置接受非首選類(lèi)型的候選函數(shù)。

  1. 如果正好一個(gè)候選符合,那么使用它。否則,產(chǎn)生一個(gè)錯(cuò)誤。

請(qǐng)注意,”最佳匹配”規(guī)則對(duì)操作符和對(duì)函數(shù)的類(lèi)型分析都是一樣的。下面是一些例子。

例.圓整函數(shù)參數(shù)類(lèi)型解析

只有一個(gè)round函數(shù)有兩個(gè)參數(shù)(第一個(gè)是numeric, 第二個(gè)是integer)。所以下面的查詢(xún)自動(dòng)把第一個(gè)類(lèi)型為integer 的參數(shù)轉(zhuǎn)換成numeric類(lèi)型:

SELECT round(4, 4);round--------4.0000(1 row)

實(shí)際上它被分析器轉(zhuǎn)換成:

SELECT round(CAST (4 AS numeric), 4);

因?yàn)閹?shù)點(diǎn)的數(shù)值常量初始時(shí)被賦予numeric類(lèi)型, 因此下面的查詢(xún)將不需要類(lèi)型轉(zhuǎn)換,并且可能會(huì)略微高效一些:

SELECT round(4.0, 4);

例.子字符串函數(shù)類(lèi)型解析

有好幾個(gè)substr函數(shù),其中一個(gè)接受text 和integer類(lèi)型。如果用一個(gè)未聲明類(lèi)型的字符串常量調(diào)用它, 系統(tǒng)將選擇接受string類(lèi)型范疇的首選類(lèi)型 (也就是text類(lèi)型)的候選函數(shù)。

SELECT substr('1234', 3);substr--------34(1 row)

如果該字符串聲明為varchar類(lèi)型,就像從表中取出來(lái)的數(shù)據(jù)一樣, 分析器將試著將其轉(zhuǎn)換成text類(lèi)型:

SELECT substr(varchar '1234', 3);substr--------34(1 row)

Note

分析器從pg_cast表中了解到text和varchar 是二進(jìn)制兼容的,意思是說(shuō)一個(gè)可以傳遞給接受另一個(gè)的函數(shù)而不需要做任何物理轉(zhuǎn)換。 因此,在這種情況下,實(shí)際上沒(méi)有做任何類(lèi)型轉(zhuǎn)換。

而且,如果以integer為參數(shù)調(diào)用函數(shù),分析器將試圖將其轉(zhuǎn)換成text類(lèi)型:

SELECT substr(1234, 3);substr--------34(1 row)

事實(shí)上變成:

SELECT substr(CAST (1234 AS text), 3);

這種自動(dòng)轉(zhuǎn)換可行是因?yàn)橛幸粋€(gè)從integer 到text 的隱式轉(zhuǎn)換。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多