पहला मुद्दा यह है कि शायद पथ मौजूद नहीं है या आपके पास निर्देशिका पर कोई लेखन विशेषाधिकार नहीं है।
SQL> select directory_path from all_directories where directory_name = 'YOUR DIRECTORY' ;
यदि आपके पास कोई पंक्ति नहीं है, तो आपको इसे अपने डीबीए के साथ संबोधित करने की आवश्यकता है, क्योंकि या तो निर्देशिका मौजूद नहीं है या आपके पास इस पर कोई विशेषाधिकार नहीं है। एक डेटाबेस निर्देशिका दो तत्वों का एक संयोजन है:
- डेटाबेस निर्देशिका ऑपरेटिंग सिस्टम में किसी स्थान का सूचक या संदर्भ है।
- उस निर्देशिका का पथ मौजूद होना चाहिए और प्रक्रिया चलाने वाले उपयोगकर्ता के पास उस पर पढ़ने और लिखने के विशेषाधिकार होने चाहिए।
दूसरे मुद्दे के लिए, समस्या यह है कि जो उपयोगकर्ता प्रक्रिया का मालिक है उसे सिस्टम विशेषाधिकार के साथ कोई निर्देशिका बनाने की अनुमति नहीं दी गई है। आपके डीबीए को आपके उपयोगकर्ता पर कोई भी निर्देशिका बनाने का विशेषाधिकार देना चाहिए, हालांकि मैं इसकी अनुशंसा नहीं करता। कोई भी विशेषाधिकार देना एक खराब सुरक्षा प्रथा है।
निर्देशिका बनाना आम तौर पर आपके डीबीए के लिए एक कार्य है। जब तक आपको अपने ऑपरेटिंग सिस्टम के आधार पर फाइल सिस्टम (लिनक्स) या विंडोज ड्राइव में अंतर्निहित निर्देशिका भी बनानी है, तब तक मुझे एक परिदृश्य की उम्मीद नहीं है जब आपको उन्हें गतिशील रूप से बनाने की आवश्यकता होती है।
आपकी विशेष परिस्थितियों को देखते हुए, आपके पास इसका कोई विकल्प नहीं है। आपको समाधान का पुनर्मूल्यांकन करने की आवश्यकता है। शायद आप WRITETOFILE के बजाय WRITETOCLOB का उपयोग कर सकते हैं, फिर परिणाम को अपने क्लाइंट साइड में sqlplus द्वारा स्पूल करें