PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Npgsql/Postgresql:फ़ंक्शन मौजूद नहीं है त्रुटि संदेश जब यह करता है

ध्यान दें कि पोस्टग्रेज फंक्शन ओवरलोडिंग की अनुमति देता है , इसलिए न केवल फ़ंक्शन NAME को मौजूद होने की आवश्यकता है, बल्कि फ़ंक्शन पैरामीटर के प्रकारों का उपयोग यह निर्धारित करने के लिए भी किया जाएगा कि किस अधिभार का उपयोग करना है, उदा.

CREATE OR REPLACE FUNCTION public.get_user_by_username(varchar, varchar, boolean)   

. के समान कार्य नहीं है
CREATE OR REPLACE FUNCTION public.get_user_by_username(varchar, boolean, varchar)

आदि

इन फ़ंक्शंस को कॉल करते समय, पैरामीटर नाम, प्रकार और संभावित ऑर्डर सभी मेल खाने चाहिए, अन्यथा आपको

. मिलेगा

एक अतिरिक्त गोचा जो मुझे काटता रहता है, वह है कार्यों को परिभाषित करते समय पोस्टग्रेसक्ल का केस-सेंसिटिविटी नियम। उदाहरण के लिए, बिना किसी आसपास के "" उद्धरण, निम्नलिखित फ़ंक्शन परिभाषा (pgAdmin 3 में डिफ़ॉल्ट सेटिंग्स का उपयोग करके):

CREATE FUNCTION MySchema.MyFunction(Parameter1 VARCHAR(40), parameTer2 VARCHAR(20))

हस्ताक्षर के साथ फ़ंक्शन को पंजीकृत करता है:(इसे सत्यापित करने के लिए एक IDE टूल का उपयोग करें)

myschema.myfunction(parameter1 VARCHAR(40), parameter2 VARCHAR(20))

परिणामस्वरूप, C# में

. से आबद्ध होने का कोई भी प्रयास
command.Parameters.Add("Parameter1", NpgsqlDbType.Varchar, 40);
command.Parameters.Add("parameTer2", NpgsqlDbType.Varchar, 20);

त्रुटि के साथ विफल हो जाएगा। इसके बजाय, आपको ऑल-लोअर-केस पैरामीटर, यानी

. के विरुद्ध बाध्य होना होगा
command.Parameters.Add("parameter1", NpgsqlDbType.Varchar, 40);
command.Parameters.Add("parameter2", NpgsqlDbType.Varchar, 20);

जब तक आप फ़ंक्शन को उद्धरणों के साथ परिभाषित नहीं करते:

CREATE FUNCTION "MySchema"."MyFunction"("Parameter1" VARCHAR(40), "parameTer2" VARCHAR(20))

इसलिए आपके लिए यह महत्वपूर्ण है कि आप अपने डेटाबेस/संगठन में केसिंग कन्वेंशन पर सहमत हों, और फिर उससे चिपके रहें (सभी लोअरकेस काफी सामान्य है)

एक विकल्प, हालांकि नाजुक होने की संभावना भी है, नामित मापदंडों के साथ बिल्कुल भी नहीं बांधना है, और इसके बजाय पैरामीटर की क्रमिक स्थिति का उपयोग करना है, उदा।

var myParameter = new NpgsqlParameter
{
    // Leave `ParameterName` out entirely,
    Direction = ParameterDirection.Input,
    IsNullable = false,
    NpgsqlDbType = NpgsqlDbType.Varchar,
    Size = 20,
    Value = "SomeValue"
};
command.Parameters.Add(myParameter);
// Same for other parameter(s)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज जांचें कि क्या आईपी (इनेट) आईपी रेंज की सूची में है

  2. PostgreSQL में UNION कैसे काम करता है

  3. मैं इस फ़ंक्शन में अपने रिटर्न मानों के लिए स्वरूपण कैसे बदलूं?

  4. एसयूएम सीमित करने के साथ INSERT पर Django में दौड़ की स्थिति को कैसे रोकें?

  5. मैं अजगर में Postgresql में डेटाबेस की सूची कैसे प्राप्त कर सकता हूं?