oracle 截取字符串转数字

create or replace procedure getChargeNote(p_areaId_factoryId in varchar2 ,
p_year in varchar2,
p_month in varchar2,
C_CHARGENOTE OUT sys_refcursor
) as
p_areaId number:=0;
p_factoryId number:=0;
begin
-- 例如 p_areaId_factoryId := ‘160?1’;
p_areaId := to_number(SUBSTR(p_areaId_factoryId,0,(INSTR(p_areaId_factoryId,'?')-1)));
--编译通过,但是报表运行调用的时候就报错(字符到数字的转换错误)
p_factoryId := to_number(SUBSTR(p_areaId_factoryId,(INSTR(p_areaId_factoryId,'?')+1)));
最新回答
一丁温暖

2024-10-14 08:29:14

是否是你截取到的那个是字符?那要的话 就无法to_number了 这样当然出错了
一白遮

2024-10-14 10:49:34

你确定你的输入参数
p_areaId_factoryId 的?前后全是number?
追问
是的 ! 我确定!
红酒高跟鞋

2024-10-14 10:41:29

我觉得最有可能就是传入的参数有问题,可以先打印看看
追问
我已经把转换参数的那一块单独拿出来测试过的了,没有问题!
追答
你在这个存储过程开始的时候把参数打印出来看看,会不会你的参数是166?1?这种格式的,
还有刚才看到了你where条件里面有or,如果你是要最后那两个条件or的话要加上括号,否则会当成前面的条件或者最后一个条件。
追问
参数格式没有问题,打印试过了!  or那里我就没有想到这么细了  ,谢谢你!
追答
或者你检查一下你的那个?号是不是中文的问号咯,只能想到这个了。。。