データベースメイベンは、Oracleという名前をリレーショナルデータベース管理システム(DBMS)の世界の大国として認識します。 オラクルは何十年にもわたって非常に強力なDBMSソリューションを開発しており、この分野のリーダーであり続けています。 データベース製品のエンドユーザーの多くは、事前に設計されたソリューションを使用しているときに混乱または困惑する可能性があり、エラーメッセージが生成されます。 Oracleによって生成される一般的なエラーメッセージの1つは、ORA-06512エラーです。
ora-00942エラーの修正方法に関する記事も参照してください。
Oracleは、さまざまな形で40年にわたって存在しているデータベース管理システムです。 元々、SCOTTスキーマと呼ばれるものを使用していました。これは、Oracleの元の従業員の1人にちなんで名付けられました。 ユーザー名「scott」とスコットの猫にちなんで名付けられたパスワード「tiger」で初めてOracleにログインしました。 現在、Oracleの使用目的に応じて、いくつかのスキーマが使用されています。
Oracleの詳細をゼロから学びたい場合は、このページが非常に役立ちます。
ORA-06512エラーの修正
Oracleでは、ORA-06512エラーは一般的な例外エラーであり、どこに問題があるのかを示します。 Oracleによって生成される最も具体的なエラーの1つであり、問題があることのみを通知し、何が問題なのかを通知しないためです。
たとえば、一般的なエラーメッセージは次のようになります。
「ORA-01422:正確なフェッチで、要求された行数を超える行が返されます
ORA-06512:「DATABASE_NAME」の66行目
ORA-06512:行1 ''
最初の行は、発生しているエラーのタイプを示します。この場合、クエリはクエリが予想するより多くのデータを返しているため、処理方法がわかりません。 「ORA-01422」コードは、確認する必要がある実際のエラーコードです。 ORA-06512は単なる一般的なエラーコードです。
2行目は、エラーが発生している場所を示しています。 DATABASE_NAMEは、その時点で作業しているデータベースになります。 行66は、エラーが発生している行であり、エラーを修正するために確認する必要がある行です。
エラー構文の3行目は、呼び出し元を示しています。 1行目を確認すると、DATABASE_NAMEの呼び出しが表示されます。
この特定のエラーを修正するには、ORA-01422に起因する問題を修正する必要があります。ORA-01422は「正確なフェッチが要求された行数より多くを返します」、または例外ハンドラを追加してOracleに無視するように指示する必要があります。 コアの問題を修正することが常に望ましいので、これが道です。
できることは2つあります。 クエリが複数の行を返すと予想される場合は、それを変更して、驚くことのないようにすることができます。 クエリが単一の行を返すことのみを期待している場合は、それも変更できます。
複数の行が必要です:
Xの場合(select * from t where…)
ループ
-ここでXレコードを処理します
終了ループ。
これにより、複数の行が返されるデータベースクエリのエラーを根絶する必要があります。
単一の行が返されることのみを期待している場合は、次のことを試すことができます。
ベギン
*を選択して…。
tから…。
処理する…。
例外
NO_DATA_FOUNDの場合
レコードが見つからない場合のエラー処理コード
TOO_MANY_ROWSの場合
レコードが多すぎる場合のエラー処理コード
終わり;
この2番目の方法では、「ORA-01422:正確なフェッチが要求された行数を超えています」エラー、したがって元のORA-06512エラーをスローせずに、単一行のみを配信する必要があります。
クエリを微調整して、複数行の回答の最初の行のみを返すようにすることもできます。 これは、データベースを完全に制御できない場合や、物事をいじりたくはないが回答が必要な場合に機能します。
宣言する
tからselect *のc1カーソル…
ベギン
c1を開きます。
c1を..にフェッチします
if(c1%notfound)then
レコードが見つからない場合のエラー処理
終了する場合;
c1を閉じます。
終わり;
(SQLを知っている場合、これらのコマンドラインに少し混乱するかもしれません。OracleはTransact-SQLを使用せず、SQL、PL / SQLの手続き型言語拡張です。Transact-SQLと同様に、PL / SQLも使用します。多くの巧妙なものであり、それ自体が非常に強力なツールです。Oracleについて学習しようとするときに、このPL / SQL FAQが役立つことがあります。
したがって、ここでの基本的なレッスンはORA-06512エラーであり、それ自体は直接修正できるものではありません。 代わりに、実際のエラーが何であるかを把握し、他のエラーコードがそれを通知し、それらのエラーを1つずつ解決する必要があります。
共有すべきオラクルのヒントやコツはありますか? コメントでそれらについて教えてください!