)。このバグの原因を追跡するのに時間がかかり、困惑しています。私は、以下の単純な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;
を 'のタイプは何とかN 'だったら' VARCHAR(1) 'カウントから来て2桁の番号を保存しようとしたとき、あなたは、このエラーになるだろう。 –
カテゴリーのテーブル構造を教えてください。 –
いいえ.. nは数字です。私はcount(*)が整数を返すので、整数にしようとしました。同じ問題。 –