एरे कंस्ट्रक्टर इससे पहले कि आप फ़ंक्शन प्रकार रिज़ॉल्यूशन पर पहुंचें - एक बार जब आप ARRAY कंस्ट्रक्टर को हटा देते हैं, जो कॉल में बिल्कुल नहीं होना चाहिए, तो आपको अन्य प्रकार के बेमेल के कारण अधिक त्रुटि संदेश प्राप्त होंगे।
आपका समाधान मिलान प्रकार के अलग-अलग पैरामीटर . पास करना है , नहीं एक सारणी। बाकी हमने जो देखा उसकी व्याख्या मात्र है।
वास्तव में क्या हुआ
एक सरणी में केवल एक ही प्रकार के मान शामिल हो सकते हैं, लेकिन आपका इनपुट मिश्रित होता है संख्यात्मक स्थिरांक एक गैर-संख्यात्मक स्ट्रिंग शाब्दिक के साथ , जिसे सुलझाया नहीं जा सकता।
यदि आप चाहते हैं कि यह text[]
. पर हल हो जाए (text
की सरणी ), आपको इस तरह स्ट्रिंग अक्षर प्रदान करने होंगे:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
या सीधे एक सरणी शाब्दिक, जैसे:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
लेकिन एक बार जब आप संख्यात्मक स्थिरांक के साथ ARRAY कंस्ट्रक्टर शुरू करते हैं, तो केवल संख्यात्मक प्रकार जोड़ना कानूनी होता है। या सामग्री के साथ कम से कम स्ट्रिंग अक्षर जिन्हें एक ही प्रकार के लिए मजबूर किया जा सकता है। आप कर सकते थे :
SELECT ARRAY[1004, 2, 1079412, '1'];
... जिसके परिणामस्वरूप int[]
. या:
SELECT ARRAY[1004, 2, 1079412, 1.0];
या यहां तक कि:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
... दोनों के परिणामस्वरूप numeric[]
।
लेकिन ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
स्ट्राइक> अवैध है और सही भी है।
सरणी कंस्ट्रक्टरों के लिए टाइप रिज़ॉल्यूशन के सटीक नियम मैनुअल के इस अध्याय में पाए जा सकते हैं:"रूपांतरण प्रकार" - "UNION, CASE, और संबंधित निर्माण" . आपकी यात्रा यहां समाप्त होती है:
चूंकि स्ट्रिंग शाब्दिक 'WwLEA6XZ0V' integer
. में परिवर्तित नहीं किया जा सकता ।