आपके पास वहां कोई स्ट्रिंग नहीं है (मुझे लगता है str
कुछ विवरण के चरित्र के रूप में घोषित किया गया है)। यदि आप एक स्ट्रिंग सम्मिलित करना चाहते हैं तो आपको अतिरिक्त उद्धरणों की आवश्यकता है अन्यथा इस उदाहरण में इसे एक कॉलम के रूप में व्याख्यायित किया जाएगा। कुछ इस तरह:
begin
...
exception
when others then
sqltext2 := 'insert into error_table_shree select '''||str||''' from dual';
execute immediate sqltext2;
end;
commit;
कृपया ध्यान दें कि मैंने आपकी स्ट्रिंग के अंत से सेमी-कोलन हटा दिया है; यह आवश्यक नहीं है (और शायद आपकी त्रुटि का वास्तविक कारण है)।
यह भी ध्यान देने योग्य है कि यह थोड़ा सा है SQL- इंजेक्शन वाला ... आपको बाइंड वैरिएबलका उपयोग करना चाहिए। ए> संयोजन के बजाय; यह सब दस्तावेज़ीकरण में वर्णित है :
begin
...
exception
when others then
execute immediate 'insert into error_table_shree select :1 from dual'
using str;
end;
commit;
हालाँकि, इस संदर्भ में गतिशील SQL का उपयोग करने की कोई आवश्यकता नहीं है; आप केवल परिवर्तनीय मान सम्मिलित कर सकते हैं:
begin
...
exception
when others then
insert into error_table_shree values (str);
end;
commit;
अंत में, मैं आपके COMMIT
. के बारे में थोड़ा चिंतित हूं; इस तरह से किसी त्रुटि को संभालने के बाद प्रतिबद्ध होना असामान्य है। अधिक संदर्भ के बिना निश्चित होना असंभव है, लेकिन स्वायत्त लेन-देन