के लिए अंतराल की प्रेसिजन आम तौर पर, जब आप कोई फ़ंक्शन निर्दिष्ट करते हैं तो रिटर्न डेटाटाइप का स्केल/सटीक/आकार अपरिभाषित होता है।पीएल/एसक्यूएल फंक्शन मान
उदाहरण के लिए, आप FUNCTION show_price RETURN NUMBER
या FUNCTION show_name RETURN VARCHAR2
कहते हैं।
आप FUNCTION show_price RETURN NUMBER(10,2)
या FUNCTION show_name RETURN VARCHAR2(20)
है की अनुमति नहीं है, और समारोह वापसी मान अप्रतिबंधित है। This is documented functionality.
अब, मुझे एक सटीक त्रुटि (ओआरए -01873) मिलती है यदि मैं निम्नलिखित में 99 99 घंटे (लगभग 400 दिन) दबाता हूं। सीमा क्योंकि the default days precision is 2
DECLARE
v_int INTERVAL DAY (4) TO SECOND(0);
FUNCTION hhmm_to_interval return INTERVAL DAY TO SECOND IS
v_hhmm INTERVAL DAY (4) TO SECOND(0);
BEGIN
v_hhmm := to_dsinterval('PT9999H');
RETURN v_hhmm;
--
END hhmm_to_interval;
BEGIN
v_int := hhmm_to_interval;
end;
/
है और यह सटीक डेटाप्रकार समारोह से वापस लौटे के हिस्से के रूप सीधे निर्दिष्ट करने की अनुमति नहीं दी जाएगी।
DECLARE
v_int INTERVAL DAY (4) TO SECOND(0);
FUNCTION hhmm_to_interval return INTERVAL DAY (4) TO SECOND IS
v_hhmm INTERVAL DAY (4) TO SECOND(0);
BEGIN
v_hhmm := to_dsinterval('PT9999H');
RETURN v_hhmm;
--
END hhmm_to_interval;
BEGIN
v_int := hhmm_to_interval;
end;
/
मैं एक SUBTYPE
DECLARE
subtype t_int is INTERVAL DAY (4) TO SECOND(0);
v_int INTERVAL DAY (4) TO SECOND(0);
FUNCTION hhmm_to_interval return t_int IS
v_hhmm INTERVAL DAY (4) TO SECOND(0);
BEGIN
v_hhmm := to_dsinterval('PT9999H');
RETURN v_hhmm;
--
END hhmm_to_interval;
BEGIN
v_int := hhmm_to_interval;
end;
/
उप प्रकार दृष्टिकोण करने के लिए किसी भी कमियां उपयोग कर सकते हैं?
कोई विकल्प (उदाहरण के लिए एक डिफ़ॉल्ट परिशुद्धता बदलने के लिए कुछ जगह)?
10 जीआर 2 के साथ काम करना।
हां, यह कोड क्लीनर और सिर्फ एक जगह परिशुद्धता बदलने के लिए के साथ लग रहा है। –