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

Postgresql 11:संग्रहीत प्रक्रिया कॉल त्रुटि - एक प्रक्रिया को कॉल करने के लिए, कॉल, जावा का उपयोग करें

PostgreSQL 11 के बाद, PostgreSQL JDBC ड्राइवर टीम ने एक ENUM नाम पेश किया है EscapeSyntaxCallMode PostgreSQL ड्राइवर संस्करण 42.2.16 में। डेटाबेस कनेक्शन या DataSource . बनाते समय हम इस एनम का उपयोग कर सकते हैं वस्तु। इस एनम के 3 प्रकार के मान हैं:

  1. "func " - इसे तब सेट करें जब हम हमेशा फंक्शन्स को कॉल करना चाहते हैं।
  2. "कॉल करें " - इसे तब सेट करें जब हम हमेशा प्रोसीजर को कॉल करना चाहते हैं।
  3. "callIfNoReturn "- यह कॉलिंग फंक्शन/प्रक्रिया में रिटर्न टाइप की जांच करता है, अगर रिटर्न टाइप मौजूद है तो PostgreSQL इसे एक फंक्शन के रूप में मानता है और इसे फंक्शन वे कहते हैं।>callIfNoReturn ", जैसा कि मैं चाहता था कि PostgreSQL स्वतः पता लगाए कि मैं फ़ंक्शन या प्रक्रिया को कॉल कर रहा हूं या नहीं।

इसलिए, इस समस्या को ठीक करने के लिए, आपको केवल नीचे दिए गए चरणों का पालन करना होगा:

  1. अपने PostgreSQL JDBC ड्राइवर संस्करण को किसी भी पुराने संस्करण से 42.2.16 या इससे अधिक pom.xml में अपग्रेड करें या ग्रेडल।

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.16</version>
    </dependency>
    
  2. और निश्चित रूप से, आपके पास एक प्रक्रिया बनाने के लिए PostgreSQL सर्वर संस्करण> =11 आपकी मशीन में स्थापित होना चाहिए।

  3. यदि आप स्प्रिंग का उपयोग कर रहे हैं, तो डेटा स्रोत ऑब्जेक्ट बनाते समय, आपको escapeSyntaxCallMode संलग्न करना होगा "jdbcUrl" . में एक क्वेरी स्ट्रिंग के रूप में इस तरह:

    <bean id="dataSource" parent="com.zaxxer.hikari.HikariDataSource">
        <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/dev_db?escapeSyntaxCallMode=${cibase.db.app.procedureCallPolicy}"/>
        <property name="username" value="${cibase.db.app.user}"/>
        <property name="password" value="${cibase.db.app.password}"/>
    </bean>
    

    ?escapeSyntaxCallMode=${cibase.db.app.procedureCallPolicy} :यहां मैंने संपत्ति फ़ाइल से एनम मूल्य चुना है, लेकिन आप सीधे "func"/"call"/"callIfNoReturn" के बीच कोई भी एनम मान टाइप कर सकते हैं आपकी आवश्यकता के अनुसार।

अब आप अपना कोड चलाएं, और यह ठीक से काम करेगा।

नोट: आपको प्रक्रिया कॉल के तरीके में कुछ भी बदलने की आवश्यकता नहीं है चाहे आप सादे JDBC कोड का उपयोग कर रहे हों या स्प्रिंग डेटा Jpa में @Procedure।

अधिक विवरण के लिए कृपया इस लिंक का अनुसरण करें https://github.com/pgjdbc/pgjdbc




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. COUNT कुल में शून्य / 0 परिणाम कैसे शामिल करें?

  2. हेरोकू त्रुटि:एक्शन व्यू ::टेम्पलेट ::त्रुटि (#<संदेश:0x007fc9df016930> के लिए अपरिभाषित विधि 'कैप्चा')

  3. अभिकथन त्रुटि:डेटाबेस कनेक्शन यूटीसी पर सेट नहीं है

  4. पोस्टग्रेज में यूनिकोड सामान्यीकरण

  5. मैं postgres_fdw का उपयोग करके किसी अन्य डेटाबेस में एक सम्मिलित क्वेरी कैसे तैयार करूं?