我已经尝试了[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 值转换为数字,以便我可以对此进行一些算术运算。
像 => 100/RES
不工作代码 =>
V_TEMP := CAST(RES AS NUMBER)
V_TEMP := TO_NUMBER(RES)
错误消息 =>"ORA-06502:PL/SQL:数字或值错误"
其最可能涉及的特殊字符(空格或换行符)
尝试
V_TEM := To_number(regexp_replace(trim(RES), '(^[[:space:]]+)|([[:space:]]+$)',null))
有一个换行符导致问题。
解决方式:-
REPLACE(REPLACE(REPLACE(column_name, CHR(10)), CHR(13)), CHR(9));
--特别感谢@KaushikNayak
要使用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) 或这两个字符的组合。逻辑是一样的。