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

Postgresql JDBC टेबल वैल्यूड पैरामीटर्स

मान लें कि आप क्लाइंट से मान पास करना चाहते हैं . यदि डेटाबेस में मान पहले से मौजूद हैं, तो अन्य, सरल तरीके हैं।

समग्र_प्रकार की सरणी . के लिए सिंटैक्स

आप जो पास कर सकते हैं वह जावा प्रकार और JDBC प्रकार , और ऐसा लगता है कि सरणी प्रकारों के लिए प्रावधान नहीं हैं, न कि समग्र मानों के सरणियों की बात करने के लिए ...

हालांकि, आप हमेशा एक text पास कर सकते हैं प्रतिनिधित्व। मैं दो बुनियादी तथ्यों पर निर्माण कर रहा हूं:

  1. उद्धरण मैनुअल :

बोल्ड जोर मेरा। इसलिए, टाइप करने के बाद number_with_time जैसा कि आपके प्रश्न में परिभाषित किया गया है, या उसी कॉलम वाली तालिका को परिभाषित किया गया है जो स्वचालित रूप से सिस्टम में पंक्ति प्रकार को पंजीकृत करता है, आप सरणी प्रकार का भी उपयोग कर सकते हैं number_with_time[]

  1. एक text है प्रत्येक . के लिए प्रतिनिधित्व मूल्य।

इसलिए, number_with_time[] . के लिए एक टेक्स्ट प्रस्तुतीकरण भी है :

'{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}'::number_with_time[]

फ़ंक्शन कॉल

वास्तविक फ़ंक्शन कॉल आपके फ़ंक्शन में परिभाषित रिटर्न मानों पर निर्भर करता है - जो आपके प्रश्न में छिपा होता है।

JDBC में सरणी प्रबंधन की जटिलताओं से बचने के लिए, text पास करें प्रतिनिधित्व। एक text taking लेते हुए फंक्शन बनाएं पैरामीटर।

मैं timestamp . के लिए "तारीख" नाम का उपयोग नहीं करने जा रहा हूं . इस थोड़े समायोजित प्रकार की परिभाषा के साथ कार्य करना:

CREATE TYPE number_with_time AS(
   _num float
 , _ts  timestamp
);

सरल SQL फ़ंक्शन:

CREATE OR REPLACE FUNCTION myfunc_sql(_arr_txt text)
  RETURNS integer       -- example
  LANGUAGE sql AS
$func$
   SELECT sum(_num)::int
   FROM   unnest (_arr_txt::number_with_time[]) x
   WHERE  _ts > '2014-04-19 20:00:00';
$func$;

कॉल करें:

SELECT myfunc_sql('{"(1,2014-04-20 20:00:00)","(2,2014-04-21 21:00:00)"}');

db<>fiddle यहां
पुराना sqlfiddle

प्रदर्शन:

  • एसक्यूएल फ़ंक्शन के ऊपर
  • पीएल/पीजीएसक्यूएल संस्करण
  • समग्र प्रकार की सरणी के लिए कुछ सिंटैक्स प्रकार
  • फ़ंक्शन कॉल करता है

किसी भी अन्य फ़ंक्शन की तरह फ़ंक्शन को एक साधारण text लेने के लिए कॉल करें पैरामीटर:

CallableStatement myProc = conn.prepareCall("{ ? = call myfunc_sql( ? ) }");
myProc.registerOutParameter(1, Types.VARCHAR);
// you have to escape double quotes in a Java string!
myProc.setString(2, "{\"(1,2014-04-20 20:00:00)\",\"(2,2014-04-21 21:00:00)\"}");
myProc.execute();
String mySum = myProc.getInt(1);
myProc.close(); 

यहां पोस्टग्रेज JDBC मैनुअल में विवरण।

JDBC के माध्यम से पूरी तालिका वापस करने का उदाहरण:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लिनक्स पर पायथन पैकेज कैसे स्थापित करें ताकि यह पहले से काम कर रहे PostgreSQL 13 plpython3u एक्सटेंशन द्वारा मिल जाए?

  2. PostgreSQL सर्वर-साइड तैयार स्टेटमेंट का जीवन काल क्या है

  3. हाइबरनेट - पोस्टग्रेज- लक्ष्य सूची में अधिकतम 1664 प्रविष्टियां हो सकती हैं

  4. PostgreSQL सूची दृश्य

  5. WHERE क्लॉज सहित विभिन्न संयोजनों के लिए अनुक्रमण रणनीति। पाठ पैटर्न