2016-04-19 184 views
2

)。このバグの原因を追跡するのに時間がかかり、困惑しています。私は、以下の単純なselect文が問題(コメントであってエラーではなく..そう、それが原因である)であると判断することができました。 nは当初は数値として定義されていましたが、私は笑顔のために整数を試しました。このコードが実行されるとORA-01401が列に挿入する値が大きすぎます(

n integer; 

    n := 1; 
select count(*) into n 
from category 
where (
     upper(ltrim(rtrim(category_long_name))) = upper(ltrim(rtrim(cat_long_name))) 
     or 
     upper(ltrim(rtrim(category_short_name))) = upper(ltrim(rtrim(cat_short_name))) 
     or 
     upper(ltrim(rtrim(category_description))) = upper(ltrim(rtrim(cat_descr))) 
    ) 
    and (settings_setting_id = sett_id) and (category_id <> cat_id); 

、私はORA-01401を取得します:コラムための挿入値が大きすぎます。したがって、唯一の "挿入"は行数のn値になります。実際の値(使用されているデバッガ)は0です。

これがどのように問題を引き起こすか分かりません。私は、この例ではxコードスニペットにcount(*)を選択しています。この文はコメントアウトされていて、手順は正常に実行されます。 'n'が使用される唯一の時間は、次のステップにあります。例外が発生する場合は0に、例外が0より大きい場合は例外です。文字通り、このステートメントだけを残して、ストアドプロシージャ全体をコメントアウトしています。

私のオンライン調査によると、count(*)は整数を返します。

カテゴリテーブルには約50行あります。

私には何が欠けていますか?

これはカテゴリです: "CATEGORY_ID" NUMBER(、0)、 "VERSION_VERSION_ID" NUMBER(、0)、 "SETTINGS_SETTING_ID" NUMBER(*、0)、 "CATEGORY_LONG_NAME" CHAR(256 BYTE) 、 "CATEGORY_SHORT_NAME" CHAR(25 BYTE)、 "CATEGORY_DESCRIPTION" VARCHAR2(4000 BYTE)、 "CATEGORY_FORM_ID" CHAR(10 BYTE)、 "CATEGORY_FORM_SYNONYM" CHAR(256バイト)の、 "CATEGORY_GUIDE_FOR_USE" VARCHAR2(4000 BYTE) 、 "CATEGORY_COMMENTS" VARCHAR2(4000バイト)、 "CATEGORY_EFFECTIVE_DATE" DATE、 " CATEGORY_UNTIL_DATE」DATE、 "CATEGORY_CREATOR" CHAR(50 BYTE)、 "CATEGORY_ADMIN_STATUS" CHAR(25 BYTE)、 "CATEGORY_ADMIN_STATUS_DATE" DATE、 "CATEGORY_REGISTR_STATUS" CHAR(25 BYTE)、 "CATEGORY_REGISTR_STATUS_DATE" DATE、 "CATEGORY_STATUS" VARCHAR2(10 BYTE)、 「CATEGORY_STATUS_JUST」VARCHAR2(2000 BYTE)、 「CATEGORY_TYPE」NUMBER

私はので、私は、私はその希望の値を割り当てられた新しいストアドプロシージャを作成し送信されたコードスニペットの周りにいくつかの他のものがありましたパラメータ(私がデバッガで設定した変数)として渡すことができます。私はまだORA-01401をN行にセレクト・カウント(*)で取得します。 where句をコメントアウトすると、問題はなくなります。

create or replace PROCEDURE PROCEDURE1 
IS 
    CATEGORY_NAME_EXISTS Exception; 
    WRONG_ACTION_PARAM Exception; 
    WRONG_PARAM_SET Exception; 
    NO_JUSTIFICATION Exception; 
    VERSION_PERSISTENT Exception; 
    CANNOT_APPROVE Exception; 
    VERSION_SETTING_NEEDED Exception; 
    n number :=1; 
    msg1 nvarchar2(2000); 
    curr_status nvarchar2(10); 
    curr_persistent number; 
    curr_sett_status nvarchar2(10); 
    update_with_hierarchy nvarchar2(3); 
    sql_txt nvarchar2(1000); 
    err_num number; 
    err_msg varchar2(200); 
    CAT_LONG_NAME nvarchar2(1000) := 'Administrative'; 
    CAT_SHORT_NAME nvarchar2(1000) := 'Administrative'; 
    CAT_DESCR nvarchar2(1000) := 'Admin form'; 
    SETT_ID number := 2; 
    CAT_ID number := 13; 
    categORy_long_name nvarchar2(1000); 
    categORy_shORt_name nvarchar2(1000); 
    categORy_description nvarchar2(1000); 
    settings_setting_id number; 
    categORy_id number; 
BEGIN 

    SELECT COUNT(*) INTO n 
    FROM categORy 

    WHERE 
    (
     UPPER(LTRIM(RTRIM(categORy_long_name))) = UPPER(LTRIM(RTRIM(cat_long_name))) 
     OR 
     UPPER(LTRIM(RTRIM(categORy_shORt_name))) = UPPER(LTRIM(RTRIM(cat_shORt_name))) 
     OR 
     UPPER(LTRIM(RTRIM(categORy_description))) = UPPER(LTRIM(RTRIM(cat_descr))) 
    ) 
    AND (settings_setting_id = sett_id) and (categORy_id <> cat_id) 

    ; 
END; 
+0

を 'のタイプは何とかN 'だったら' VARCHAR(1) 'カウントから来て2桁の番号を保存しようとしたとき、あなたは、このエラーになるだろう。 –

+0

カテゴリーのテーブル構造を教えてください。 –

+0

いいえ.. nは数字です。私はcount(*)が整数を返すので、整数にしようとしました。同じ問題。 –

答えて

0

これを試してみてください:

DECLARE 
    n number := 1; 
BEGIN 
    SELECT COUNT(*) INTO n 
    FROM categORy 
    WHERE 
    (
     UPPER(LTRIM(RTRIM(categORy_long_name))) = UPPER(LTRIM(RTRIM(cat_long_name))) 
     OR 
     UPPER(LTRIM(RTRIM(categORy_shORt_name))) = UPPER(LTRIM(RTRIM(cat_shORt_name))) 
     OR 
     UPPER(LTRIM(RTRIM(categORy_description))) = UPPER(LTRIM(RTRIM(cat_descr))) 
    ) 
    AND (settings_setting_id = sett_id) and (categORy_id <> cat_id); 
END; 
+0

ありがとう...しかし同じ問題。 –

関連する問題