आपका कार्य एक अनंत लूप में जाएगा और उसमें से कभी भी बाहर नहीं आएगा। हालांकि यह संकलित करता है, इसका मतलब यह नहीं है कि फ़ंक्शन ठीक काम करेगा, क्योंकि समस्या रन टाइम पर होगी।
WHILE कंडीशन हमेशा TRUE होती है, और काउंटर कभी भी इंक्रीमेंट नहीं करता है, क्योंकि फंक्शन कभी भी IF कंडीशन में नहीं जाता है।
आपने counter :=2
. सेट किया है और फिर आपकी IF शर्त है:
यह कभी सच कैसे हो सकता है? 2 कभी भी 2 से बड़ा नहीं होता , इसलिए काउंटर कभी नहीं बढ़ाया जाता है , चूंकि आपके पास यह IF-END IF
. के अंदर है ब्लॉक करें।
जब आप फ़ंक्शन को निष्पादित करते हैं, तो यह कभी भी अनंत लूप से बाहर नहीं आता है।
आपकी आवश्यकता के अनुसार,
जब Oracle आपको पहले से ही हजार विभाजक प्रदान करता है, तो आप पहिया को फिर से क्यों बनाना चाहते हैं।
दस्तावेज़ीकरण से,
-
तत्व:जी
-
उदाहरण :9G999
-
विवरण:निर्दिष्ट स्थिति में समूह विभाजक (NLS_NUMERIC_CHARACTER पैरामीटर का वर्तमान मान) लौटाता है। आप एक संख्या प्रारूप मॉडल में एकाधिक समूह विभाजक निर्दिष्ट कर सकते हैं।
उदाहरण के लिए,
SQL> SELECT TO_CHAR(sal,'999G999') FROM emp;
TO_CHAR(
--------
800
1,600
1,250
2,975
1,250
2,850
2,450
3,000
5,000
1,500
1,100
950
3,000
1,300
14 rows selected.
यदि आप चाहते हैं कि फ़ंक्शन का नाम SQL सर्वर के समान हो फ़ंक्शन, फिर उसी नाम से Oracle डेटाबेस में एक उपयोगकर्ता-परिभाषित फ़ंक्शन बनाएं। तर्क उपरोक्त क्वेरी के समान होगा।
उदाहरण के लिए,
SQL> CREATE OR REPLACE FUNCTION NumericFormat(
2 col NUMBER)
3 RETURN VARCHAR2
4 AS
5 o_num VARCHAR2(20);
6 BEGIN
7 o_num:=TO_CHAR(col,'999G999');
8 RETURN o_num;
9 END;
10 /
Function created.
SQL>
SQL> sho err
No errors.
SQL>
आइए फ़ंक्शन निष्पादित करें :
SQL> SELECT NumericFormat(sal) FROM emp;
NUMERICFORMAT(SAL)
----------------------------------------------
800
1,600
1,250
2,975
1,250
2,850
2,450
3,000
5,000
1,500
1,100
950
3,000
1,300
14 rows selected.
SQL>