आपके फ़ंक्शन में कुछ smallint
है पैरामीटर।
लेकिन कॉल में, आप संख्यात्मक शाब्दिकों का उपयोग कर रहे हैं जिन्हें integer
प्रकार माना जाता है ।
एक स्ट्रिंग शाब्दिक या स्ट्रिंग स्थिरांक ('123'
) तुरंत टाइप नहीं किया जाता है। यह निर्दिष्ट या स्पष्ट रूप से डाले जाने तक "अज्ञात" टाइप रहता है।
हालांकि, एक संख्यात्मक शाब्दिक या संख्यात्मक स्थिरांक तुरंत टाइप किया जाता है। मैनुअल:
<ब्लॉकक्वॉट>
एक संख्यात्मक स्थिरांक जिसमें न तो कोई दशमलव बिंदु होता है और न ही घातांक शुरू में integer
प्रकार माना जाता है यदि इसका मान integer
. प्रकार में फिट बैठता है (32 बिट्स); अन्यथा इसे टाइप bigint
. माना जाता है यदि इसका मान bigint
. प्रकार में फिट बैठता है (64 बिट्स); अन्यथा इसे numeric
type टाइप करने के लिए लिया जाता है . दशमलव बिंदु और/या घातांक वाले स्थिरांक हमेशा प्रारंभ में numeric
प्रकार के माने जाते हैं ।
यह भी देखें:
- PostgreSQL त्रुटि:कार्य to_tsvector(चरित्र भिन्न, अज्ञात) मौजूद नहीं है
समाधान
smallint
. के लिए अश्लील कास्ट जोड़ें पैरामीटर या पास उद्धृत (बिना टाइप किए गए) अक्षर।
डेमो
CREATE OR REPLACE FUNCTION f_typetest(smallint)
RETURNS bool AS 'SELECT TRUE' LANGUAGE sql;
गलत कॉल:
SELECT * FROM f_typetest(1);
सही कॉल:
SELECT * FROM f_typetest('1');
SELECT * FROM f_typetest(smallint '1');
SELECT * FROM f_typetest(1::int2);
SELECT * FROM f_typetest('1'::int2);
db<>फिडल यहाँ
पुराना sqlfiddle.