Oracle 铸造错误预言

Oracle 铸造错误预言,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我尝试了[CAST&TO_NUMBER]两种方法,但没有尝试从另一个过程返回的工作转换值 SELECT DBMS_LOB.SUBSTR(SUBSTR(DETAIL_LOB, 2300, 4), 2000) INTO RES FROM lONG_TO_CLOB_TEMP_TABLE;` 上述查询返回的RES值为40 RES数据类型为varchar2 现在我想把RES值转换成数字,这样我就可以用它做一些算术运算 like=>100/RES 不工作代码=> V_TEMP := CAST(RE

我尝试了[CAST&TO_NUMBER]两种方法,但没有尝试从另一个过程返回的工作转换值

SELECT DBMS_LOB.SUBSTR(SUBSTR(DETAIL_LOB, 2300, 4), 2000) 
  INTO RES 
FROM lONG_TO_CLOB_TEMP_TABLE;`
上述查询返回的RES值为40

RES数据类型为varchar2

现在我想把RES值转换成数字,这样我就可以用它做一些算术运算

like=>100/RES

不工作代码=>

V_TEMP := CAST(RES AS NUMBER)
V_TEMP := TO_NUMBER(RES)

错误消息=>“ORA-06502:PL/SQL:数值或值错误”

要使用PL/SQL删除换行符,请使用以下命令:

declare charwithnewline VARCHAR2(10) := CONCAT('190', CHR(13));
begin
dbms_output.put_line('+++++++++++++++++++++++++');
dbms_output.put_line(charwithnewline);
dbms_output.put_line('+++++++++++++++++++++++++');
dbms_output.put_line(REPLACE(charwithnewline,CHR(13),''));
dbms_output.put_line('+++++++++++++++++++++++++');
end; 

注意:换行符可以是CHR(13)或CHR(10)或这两个字符的组合。逻辑是相同的。

其最可能的特殊字符涉及(空格或换行符)

试一试


导致问题的原因是线路中断

解决方法:-

REPLACE(REPLACE(REPLACE(column_name, CHR(10)), CHR(13)), CHR(9));

--特别感谢@KaushikNayak

。。。你不能只使用
DBMS\u LOB.SUBSTR
?这是我更新的复制粘贴错误。@KaushikNayak我正在从“详细信息”列中搜索特定值,这就是为什么也使用SUBSTR的原因。你确定数值错误在强制转换中,而不是你在代码中执行的实际除法操作吗?很可能是这样的然后,除了“40”之外,还有其他字符正在被提取,可能是换行。。或者您的
V_TEMP
变量的长度较短。
REPLACE(REPLACE(REPLACE(column_name, CHR(10)), CHR(13)), CHR(9));