sql >> データベース >  >> RDS >> Oracle

行番号でORA-06512を解決する方法

    目次

    Oracleデータベースの説明

    ORA-06512 Oracleでは、OracleデータベースのPLSQLプログラムでよく見られるエラーの1つです

    このエラーについてOracleのドキュメントに記載されている内容は次のとおりです

    参照:Oracleドキュメント

    これは、Unixで以下と入力することでいつでも見つけることができます

    oerr ORA 06512

    ORA-06512エラーの説明:

    エラーORA-06512 PLSQLコードの未処理の例外によってスタックが巻き戻されているときのバックトレースメッセージを意味します。これは、すべてのPLSQL例外のキャッチオールエラーであり、一般的に見られます。

    ORA 6512は実際のエラーを示していませんが、PLSQLコードの未処理のエラーの行番号を示しています。 ORA-6512は通常、次の例のように、前のメッセージがエラーの理由を示しているメッセージスタックに表示されます。

    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at line 1112
    

    上記では、黄色で強調表示されたエラーが主なエラーです

    ORA-06512エラーの理由:

    このOracleエラーを解決するためのオプションは次のとおりです。

    1)未処理のエラーの原因となっている状態を修正します。
    2)この未処理のエラーの例外ハンドラを記述します。
    3)OracleDBAに問い合わせてください。

    ORA-06512の例:

    それに取り組む方法のいくつかの例を見てみましょう

    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    Site_name varchar2(5);
    begin
    site_name := 'techgoeasy.com';
    end;
    /
    Procedure created.
    sql> Exec Testora_proc
    ERROR at line 1:
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 5

    上記の例では、プロシージャは正常にコンパイルされますが、実行中にエラーが発生しました

    したがって、実際のエラーはエラーです

    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    

    変数のサイズを大きくすることで簡単に修正できます

    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    Site_name varchar2(20);
    begin
    site_name := 'techgoeasy.com';
    end;
    /
    Procedure created.
    SQL> Exec Testoraproc
    PL/SQL procedure successfully completed.
    

    例外ハンドラーを使用してこれを解決することもできます

    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    Site_name varchar2(5);
    begin
    site_name := 'techgoeasy.com';
    EXCEPTION
    WHEN OTHERS THEN
    site_name := 'tech';
    end;
    /
    Procedure created.SQL>Exec Testoraproc;
    PL/SQL procedure successfully completed.
    

    別の例は

    です
    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    node_name varchar2(5);
    begin
    select node into node_name from db_node;
    end;
    /
    Procedure created
    SQL> Exec Testora_proc;
    ORA-01422: exact fetch returns more than requested number of rows
    ORA-06512: at “NODE_NAME”, line 4
    ORA-06512: at line 1
    
    

    ここで、ORA-01422が実際のエラーです。 db_nodeテーブルに複数の行があり、ノードの複数の値を取得します。したがって、1つの修正で1つの行を制限できます

    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    node_name varchar2(5);
    begin
    select node into node_name from db_node where rownum <2;
    end;
    /
    Procedure created
    SQL> Exec Testora_proc;
    PL/SQL procedure successfully completed.
    
    

    別の例は

    です
    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    node_name varchar2(5);
    begin
    select node into node_name from db_node;
    end;
    /
    Procedure created
    SQL> Exec Testora_proc;
    ORA-01403: no data found
    ORA-06512: at “NODE_NAME”, line 4
    ORA-06512: at line 1
    
    

    ここで、ORA-01403が実際のエラーです。 db_node oracleテーブルに行がなく、データが見つからないというエラーが発生しているため、1つの修正で例外処理を行うことができます

    CREATE OR REPLACE PROCEDURE Testora_proc
    AS
    node_name varchar2(5);
    begin
    select node into node_name from db_node where rownum <2;
    EXCEPTION WHEN NO_DATA_FOUND  
    THEN 
    node_name := 'tech'; 
    end; 
    /
    Procedure created
    SQL> Exec Testora_proc;
    PL/SQL procedure successfully completed.
    
    

    SYS.UTL_FILE

    には、さらにいくつかの例があります。
    SQL> declare
    F_LOG  utl_file.file_type;
    begin
    F_LOG := utl_file.fopen('TESTDIR','k', 'w');
    end;
    /  2    3    4    5    6
    declare
    *
    ERROR at line 1:
    ORA-29283: invalid file operation
    ORA-06512: at "SYS.UTL_FILE", line 536
    ORA-29283: invalid file operation
    ORA-06512: at line 4
    

    ここでの主なエラーはORA-29283です。リンクをクリックして解決策を確認してください

    ORA-6512のこの投稿を気に入っていただければ幸いです。 エラーメッセージ

    関連記事
    ORA-00911
    ORA-03113
    ORA-00257
    ORA-27154
    ORA-29913
    ORA-20001、11gのスキーマ統計を収集(FND_HISTOGRAM_COLS )

    1. to_date()がPostgreSQLでどのように機能するか

    2. SQL Serverインスタンスでまだ使用されている廃止された機能を見つける最も簡単な方法(T-SQLの例)

    3. T-SQL火曜日#67:新しいバックアップと復元の拡張イベント

    4. MySQL ACOS()関数–数値のアークコサインを返します