3

私の質問: 11g Oracle データベースにクエリを実行して、エラー コードの説明を取得するにはどうすればよいですか?

背景:ORA-code特定のエラーの詳細について oracle に問い合わせるコードを見たことがあると誰かが私に言いました。私はしばらくの間 Google で検索してきましたが、そのようなものを見つけることができないようです。これが可能かどうか誰にもわかりますか?それか何かのav $ viewはありますか?

理由:指定したエラー コードの説明を返すプロシージャを作成したいと考えています。したがって、それが書かれているときは、次のように呼び出すことができます。

select ora_code_desc('ORA-00000')
from dual;

そして、次のように出力されます。

Normal, successful completion.
Cause: An operation has completed normally, having met no exceptions.
Action: No action required.

またはそのようなもの:)助けてくれてありがとう!

4

4 に答える 4

8

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もちろん、文字列を受け取り、最初の 3 文字を削除し、結果の数値を に渡し、結果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

オラクルは、Unix プラットフォームのoerr用のユーティリティも出荷しています。このユーティリティでは、詳細 (特に、探している原因とアクション) が提供されます。そのデータも本当に必要な場合は、オペレーティング システム シェルを呼び出してoerrコマンドを実行し、結果を返す Java ストアド プロシージャを作成できます。これにより、より多くのデータが得られますが、明らかに、はるかに複雑になります。

于 2012-08-09T21:34:09.310 に答える
2

SQLERRM関数を探しています。

于 2012-08-09T21:31:05.210 に答える
2

コマンドラインから

oerr ora <error number>

出力:

oerr ora 1501
01501, 00000, "CREATE DATABASE failed"
// *Cause:  An error occurred during create database
// *Action: See accompanying errors.
于 2012-08-09T21:38:22.670 に答える
0

完全を期すために、Oracle のドキュメントにはエラーだけでなく、すべてのエラーの完全なリストが含まれていることを指摘しておきORAます。これらには、ユーティリティのようなoerr説明と推奨されるアクションも含まれています。

開発者が RTFM よりもクエリを作成することを好むことは知っています。しかし、レトロになりたいと感じたら、ここで見つけることができます。

于 2012-08-10T07:37:49.073 に答える