为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8
【操作系统】:win
【CPU】: Intel
【问题描述】*:
create or replace function f_decodepay(f in number)
return number
as
v_key varchar(50);
v_t varchar(1000); -- 结果数字
v_ft varchar(1000); -- 需要解密的数字的字符串
v_c varchar(1);
v_temp number;
v_temp2 number;
v_i2 integer;
v_flag varchar(1);
v_ft_length integer;
v_i integer;
begin
v_key:='384962867' ; -- from b2x701nk by: String secretNumKey = String.valueOf(java.lang.Math.abs("b2x701nk".hashCode()));
v_t := '';
v_ft := convert(varchar , f);
v_flag := case when substr(v_ft,0 ,1) = '-' then '-' else '' end ;
v_ft := case when substr(v_ft,0 ,1) = '-' then substr(v_ft, 1) else v_ft end;
v_ft_length := length(v_key);
for v_ix in (select v_ft_length) loop
v_i := convert(int, v_ix);
v_c := SUBSTRING(v_ft, v_i , 1) ;
v_i2 := case when v_i < v_ft_length then v_i else 0 end;
v_temp := to_number(substr(v_ft,v_i2 ,1)) ^ to_number(substr(v_key,v_i2 ,1)) ;
v_temp2 := to_number(substr(v_ft,v_i2 ,1)) - 48;
v_temp := case when v_temp < 10 then v_temp else v_temp2 end ;
v_c := '' ; -- case when '.' != v_c && i < v_ft_length then convert(varchar, v_temp ) else v_c end;
v_t := concat(v_t, v_c);
end loop;
return concat(v_flag, v_t);
end
convert(int, v_ix); 提示 参数类型错误,
直接用 SUBSTRING(v_ft, v_ix, 1) ; 也提示参数类型错误
是因为for循环里 v_ix不是int么? 如何处理啊
for v_ix in (select v_ft_length) loop
这个地方这么些就变成一个隐式游标了,按照你的逻辑,可以修改为试试:
for v_ix in 1..v_ft_length loop
错误号: -6120
错误消息: 第25 行附近出现错误:
无法转换的数据类型