gpt4 book ai didi

Oracle select count(*) into n 生成 ORA-01401 插入的值对于列来说太大

转载 作者:行者123 更新时间:2023-12-02 03:47:06 26 4
gpt4 key购买 nike

我花了几个小时追踪这个错误的来源,但被难住了。我设法确定下面的简单选择语句是问题所在(注释而不是错误......所以是的,这就是原因)。 n 最初被定义为一个数字,我也尝试了整数来表示笑容。

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。

我不明白这怎么会引起问题。我在示例中看到了 select count(*) into x 代码片段。将此语句注释掉后,该过程运行良好。唯一一次使用“n”是在下一步中,如果它> 0,我将引发异常。我已经注释掉了整个存储过程,只留下了这个语句,它会导致错误。

我的在线研究表明 count(*) 返回一个整数。

类别表大约有 50 行。

我错过了什么?

这是类别:“CATEGORY_ID”NUMBER(,0),“VERSION_VERSION_ID”NUMBER(,0),“SETTINGS_SETTING_ID”数字(*,0), “CATEGORY_LONG_NAME”CHAR(256 字节), “CATEGORY_SHORT_NAME”CHAR(25 字节), “CATEGORY_DESCRIPTION”VARCHAR2(4000 字节), “CATEGORY_FORM_ID”字符(10字节), “CATEGORY_FORM_SYNONYM”字符(256 字节), “CATEGORY_GUIDE_FOR_USE”VARCHAR2(4000 字节), “CATEGORY_COMMENTS”VARCHAR2(4000 字节), “CATEGORY_EFFECTIVE_DATE”日期, “CATEGORY_UNTIL_DATE”日期, “CATEGORY_CREATOR”字符(50 字节), “CATEGORY_ADMIN_STATUS”字符(25 字节), “CATEGORY_ADMIN_STATUS_DATE”日期, "CATEGORY_REGISTR_STATUS"CHAR(25 BYTE), “CATEGORY_REGISTR_STATUS_DATE”日期, “CATEGORY_STATUS”VARCHAR2(10字节), “CATEGORY_STATUS_JUST”VARCHAR2(2000 字节), “CATEGORY_TYPE”NUMBER

我发送的代码片段周围还有一些其他内容,因此我创建了一个新的存储过程,在其中分配了将作为参数传递的值(我在调试器中设置的变量)。我仍然在 N 行的 select count(*) 上收到 ORA-01401。当我注释掉 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;

最佳答案

试试这个:

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;

关于Oracle select count(*) into n 生成 ORA-01401 插入的值对于列来说太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36707642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com