निम्नलिखित कार्य करना चाहिए:
SELECT to_number(:x,
translate(:x, '012345678-+', '999999999SS'),
'nls_numeric_characters=''.,''')
FROM dual;
यह सही दूसरे तर्क का निर्माण करेगा 999.999999
कुशल translate
. के साथ इसलिए आपको यह जानने की जरूरत नहीं है कि पहले से कितने अंक हैं। यह सभी समर्थित Oracle संख्या प्रारूप के साथ काम करेगा (स्पष्ट रूप से 10.2.0.3 में 62 महत्वपूर्ण अंक तक)।
दिलचस्प है, यदि आपके पास वास्तव में एक बड़ी स्ट्रिंग है तो सरल to_number(:x)
काम करेगा जबकि यह तरीका विफल हो जाएगा।
संपादित करें:नकारात्मक संख्याओं के लिए समर्थन सॉलिवर को धन्यवाद।