मान लें कि आप क्लाइंट से मान पास करना चाहते हैं . यदि डेटाबेस में मान पहले से मौजूद हैं, तो अन्य, सरल तरीके हैं।
समग्र_प्रकार की सरणी . के लिए सिंटैक्स
आप जो पास कर सकते हैं वह जावा प्रकार और JDBC प्रकार , और ऐसा लगता है कि सरणी प्रकारों के लिए प्रावधान नहीं हैं, न कि समग्र मानों के सरणियों की बात करने के लिए ...
हालांकि, आप हमेशा एक text
पास कर सकते हैं प्रतिनिधित्व। मैं दो बुनियादी तथ्यों पर निर्माण कर रहा हूं:
- उद्धरण मैनुअल :
बोल्ड जोर मेरा। इसलिए, टाइप करने के बाद number_with_time
जैसा कि आपके प्रश्न में परिभाषित किया गया है, या उसी कॉलम वाली तालिका को परिभाषित किया गया है जो स्वचालित रूप से सिस्टम में पंक्ति प्रकार को पंजीकृत करता है, आप सरणी प्रकार का भी उपयोग कर सकते हैं number_with_time[]
।
- एक
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 के माध्यम से पूरी तालिका वापस करने का उदाहरण: