v_num:=LPAD(v_num,(v_fmt-length(v_num))) ;测试这条语句,v_num的值为null,请问哪里出错了?
解决方案 »
- 请教高手,proc 中 full join 的问题
- Oracle列信息?
- 如何在游标for循环中使用动态SQL语句?
- Oracle 如何插入 Byte
- Oracle中如何编写通过Databaselink得到的sequence?
- 为什么我没有找到Enterprise Manager Console??在什么地方呢?
- 求教,如何截取字符串?
- 學developr開發,要裝哪些軟件及怎樣設置?
- oracle联接的怪问题
- Microsoft OLE DB Provider for Oracle 错误 '80004005'请高手指教???
- 数据库里的电影如何进行播放
- OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用.
实在不行就在TEST窗口中测试一下. 不会在开大家玩笑吧?
我的存储过程如下:
create or replace procedure P_GET_INDEX (v_vcAspID varchar,v_Ex char,v_isYear number,v_result out varchar)
is
v_num char(10);v_Fmt number;v_Year char(10);v_rowcount char(20);
begin
if v_isYear=1 then
--select to_char(sysdate ,'YYYY') from dual;
v_Year:=substr( to_char(sysdate ,'YYYY') ,3,2);
else
v_Year:='';
end if;
v_Fmt:=4 ;
select COUNT(*) INTO v_rowcount from TB_SYS_INDEX where vcAspID= v_vcAspID and vcPrefix=v_ex and vcYear=v_Year;
if v_rowcount<=0 then
insert into TB_SYS_INDEX values(v_vcAspID,v_ex,rtrim(v_Year),1);
else
update TB_SYS_INDEX set fNum=fNum+1 where vcAspID= v_vcAspID and vcPrefix=v_ex and vcYear=v_Year;
end if;
select to_char(fNum) into v_num from TB_SYS_INDEX where vcAspID= v_vcAspID and vcPrefix=v_ex and vcYear=v_Year ;
if v_num<10000 then
DBMS_OUTPUT.PUT_LINE(' v_num=' ||v_num);
DBMS_OUTPUT.PUT_LINE(' length(v_num)=' ||length(v_num));
v_num:=LPAD(v_num,(v_fmt-length(v_num))) ;
v_num:=replace(v_num,' ','0');
v_result:=rtrim(v_ex)||rtrim(v_Year)||rtrim(v_num)||',';
else
v_result:=rtrim(v_ex)||rtrim(v_Year)||rtrim(v_num)||',' ;
end if;
end P_GET_INDEX ;
如sxfwang() ( 二级(初级)) 所说,V_NUM 为CHAR(N),则除非为NULL,否则length(v_bum)总是n,
从以上可以得出
IF if v_num<10000 then
v_num:=LPAD(v_num,4-10) ; --已经超出了V_NUM实际存储的字符.
... END IF; 这样自然是NULL.因为对于第二个参数,如果是小于1,结果就是NULL.