यह SQL से सुलभ नहीं है, लेकिन PL/SQL के भीतर, आप SQLERRM
. का उपयोग कर सकते हैं समारोह।
उदाहरण के लिए
SQL> ed
Wrote file afiedt.buf
1 begin
2 dbms_output.put_line( sqlerrm(0) );
3 dbms_output.put_line( sqlerrm(-1041) );
4* end;
SQL> /
ORA-0000: normal, successful completion
ORA-01041: internal error. hostdef extension doesn't exist
PL/SQL procedure successfully completed.
बेशक, आप एक ora_code_desc
बना सकते हैं फ़ंक्शन जिसने एक स्ट्रिंग में लिया, पहले तीन वर्णों को हटा दिया, परिणामी संख्या को SQLERRM
. पर पास कर दिया , और परिणाम लौटा दिया
SQL> ed
Wrote file afiedt.buf
1 create or replace function ora_code_desc( p_code in varchar2 )
2 return varchar2
3 is
4 l_str varchar2(1000);
5 begin
6 l_str := sqlerrm( substr(p_code, 4 ) );
7 return l_str;
8* end;
SQL> /
Function created.
SQL> select ora_code_desc( 'ORA-00000' ) from dual;
ORA_CODE_DESC('ORA-00000')
--------------------------------------------------------------------------------
ORA-0000: normal, successful completion
Oracle यूनिक्स प्लेटफॉर्म पर एक उपयोगिता भी भेजता है oerrए> जो अधिक विवरण प्रदान करता है-- विशेष रूप से वह कारण और कार्य जिसकी आप तलाश कर रहे हैं। यदि आप वास्तव में वह डेटा भी चाहते हैं, तो आप एक जावा संग्रहीत कार्यविधि लिख सकते हैं जो एक ऑपरेटिंग सिस्टम शेल को कॉल किया जाता है, एक oerr
निष्पादित किया जाता है आदेश, और परिणाम वापस कर दिया। इससे आपको अधिक डेटा मिलेगा लेकिन जाहिर है, यह बहुत अधिक जटिल होगा।