ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 关于decode的新问题

标题: 关于decode的新问题
离线 xing_xin
一般会员



精华贴数 0
个人空间 0
技术积分 164 (11326)
社区积分 4 (16812)
注册日期 2001-12-3
论坛徽章:1
授权会员     
      

发表于 2002-3-26 18:51 
关于decode的新问题

我想用decode实现一个简单的十进制 to 十六进制的功能,转数字没有问题,如:888转成378,但是转成字母就报错,如:500

错误位于第1行:
ORA-01722: invalid number
ORA-06512: at line 16
代码如下
set serveroutput on;
accept aa prompt 'aa is: ';
declare
v_temp number;
v_result varchar2(9);
v_result_1 VARCHAR2(20);
p_temp number;
begin
  v_temp := &aa;
  if v_temp = 0 then
     dbms_output.put_line('can not be zone');
  else
    while floor(v_temp/16) >= 1 loop
     p_temp := mod(v_temp,16);
      select  decode(p_temp,1,1,
                   2,'2',
                   3,'3',
                   4,'4',
                   5,'5',
                   6,'6',
                   7,'7',
                   8,'8',
                   9,'9',
                   10,'A',
                   11,'B',
                   12,'C',
                   13,'D',
                   14,'E',
                   15,'F',
                   0) into v_result_1 from dual;
      v_result := v_result_1||v_result;
      v_temp := floor(v_temp/16);
    dbms_output.put_line('v_temp = '||v_temp);
    end loop;
  v_result := v_temp||v_result;
  dbms_output.put_line('the number to hex =  '||v_result);
  end if;
end;
/


__________________
天气慢慢的,慢慢的热起来了。
只看该作者    顶部
离线 jlandzpa
版主


精华贴数 29
个人空间 0
技术积分 45963 (15)
社区积分 53594 (10)
注册日期 2001-10-12
论坛徽章:16
现任管理团队成员ITPUB元老授权会员生肖徽章2007版:牛ITPUB新首页上线纪念徽章 
      

发表于 2002-3-26 19:01 
没有问题!

Elapsed: 00:00:00.40
11:07:00 SQL> set serveroutput on;
11:07:20 SQL> accept aa prompt 'aa is: ';
aa is: 888
11:07:25 SQL> declare
11:07:35   2  v_temp number;
11:07:35   3  v_result varchar2(9);
11:07:35   4  v_result_1 VARCHAR2(20);
11:07:35   5  p_temp number;
11:07:35   6  begin
11:07:35   7  v_temp := &aa;
11:07:35   8  if v_temp = 0 then
11:07:35   9  dbms_output.put_line('can not be zone');
11:07:35  10  else
11:07:35  11  while floor(v_temp/16) >= 1 loop
11:07:35  12  p_temp := mod(v_temp,16);
11:07:35  13  select decode(p_temp,1,1,2,'2',3,'3',
11:07:35  14  4,'4', 5,'5', 6,'6', 7,'7', 8,'8', 9,'9',
11:07:35  15  10,'A', 11,'B', 12,'C', 13,'D', 14,'E', 15,'F', 0) into v_result_1 from dual;
11:07:36  16  v_result := v_result_1||v_result;
11:07:36  17  v_temp := floor(v_temp/16);
11:07:36  18  dbms_output.put_line('v_temp = '||v_temp);
11:07:36  19  end loop;
11:07:36  20  v_result := v_temp||v_result;
11:07:36  21  dbms_output.put_line('the number to hex = '||v_result);
11:07:36  22  end if;
11:07:36  23  end;
11:07:36  24  /
old   7: v_temp := &aa;
new   7: v_temp := 888;
v_temp = 55
v_temp = 3
the number to hex = 378

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.81
11:07:38 SQL>


__________________
my blog: http://blog.itpub.net/jlandzpa
mail: “id”@itpub.net

注意: [投资理财版] 业已提供上证指数菠菜,欢迎参与 :)

[头像] 黑木明纱 Meisa Kuroki  :)
只看该作者    顶部
在线/呼叫 biti_rainy
人生就是如此



精华贴数 38
个人空间 0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
现任管理团队成员ITPUB长老会成员ITPUB元老年度论坛发贴之星年度论坛发贴之星ITPUB北京九华山庄2008年会纪念徽章
管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章

发表于 2002-3-26 21:29 
jlangzpa

你用的什么工具?
怎么显示程序运行时间那么精确


__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者    顶部
离线 xing_xin
一般会员



精华贴数 0
个人空间 0
技术积分 164 (11326)
社区积分 4 (16812)
注册日期 2001-12-3
论坛徽章:1
授权会员     
      

发表于 2002-3-26 21:37 
斑竹你用500试一下

500因该转成1F4
但是出错。斑竹你用500试试
楼上的,斑竹用的SQLPLUS ,把“选项”--“环境”的TIMING设置了一下


__________________
天气慢慢的,慢慢的热起来了。
只看该作者    顶部
离线 jlandzpa
版主


精华贴数 29
个人空间 0
技术积分 45963 (15)
社区积分 53594 (10)
注册日期 2001-10-12
论坛徽章:16
现任管理团队成员ITPUB元老授权会员生肖徽章2007版:牛ITPUB新首页上线纪念徽章 
      

发表于 2002-3-26 22:19 
呵呵,ok!

14:23:50 SQL> set serveroutput on;
14:24:45 SQL> accept aa prompt 'aa is: ';
aa is: 500
14:24:48 SQL> declare
14:24:55   2  v_temp number;
14:24:55   3  v_result varchar2(9);
14:24:55   4  v_result_1 VARCHAR2(20);
14:24:55   5  p_temp number;
14:24:55   6  begin
14:24:55   7  v_temp := &aa;
14:24:55   8  if v_temp = 0 then
14:24:55   9  dbms_output.put_line('can not be zone');
14:24:55  10  else
14:24:55  11  while floor(v_temp/16) >= 1 loop
14:24:55  12  p_temp := mod(v_temp,16);
14:24:55  13  select decode(p_temp,10,'A',11,'B',12,'C',13,'D',14,
14:24:55  14  'E','15','F',to_char(p_temp)) into v_result_1 from dual;
14:24:55  15  v_result := v_result_1||v_result;
14:24:55  16  v_temp := floor(v_temp/16);
14:24:55  17  dbms_output.put_line('v_temp = '||v_temp);
14:24:55  18  end loop;
14:24:55  19  v_result := v_temp||v_result;
14:24:56  20  dbms_output.put_line('the number to hex = '||v_result);
14:24:56  21  end if;
14:24:56  22  end;
14:24:56  23  /
原值    7: v_temp := &aa;
新值    7: v_temp := 500;
v_temp = 31
v_temp = 1
the number to hex = 1F4

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.30


__________________
my blog: http://blog.itpub.net/jlandzpa
mail: “id”@itpub.net

注意: [投资理财版] 业已提供上证指数菠菜,欢迎参与 :)

[头像] 黑木明纱 Meisa Kuroki  :)
只看该作者    顶部
离线 xing_xin
一般会员



精华贴数 0
个人空间 0
技术积分 164 (11326)
社区积分 4 (16812)
注册日期 2001-12-3
论坛徽章:1
授权会员     
      

发表于 2002-3-27 00:19 
谢谢jlandzpa

这是不是说DECODE中,符合条件后的值只能是同一种类型,要不是数字,要不是字符


__________________
天气慢慢的,慢慢的热起来了。
只看该作者    顶部
离线 jlandzpa
版主


精华贴数 29
个人空间 0
技术积分 45963 (15)
社区积分 53594 (10)
注册日期 2001-10-12
论坛徽章:16
现任管理团队成员ITPUB元老授权会员生肖徽章2007版:牛ITPUB新首页上线纪念徽章 
      

发表于 2002-3-27 01:16 
Re: 谢谢jlandzpa

呵呵,以前我也没有注意这个!
oracle有点蠢?!

QUOTE:
最初由 xing_xin 发布
这是不是说DECODE中,符合条件后的值只能是同一种类型,要不是数字,要不是字符




__________________
my blog: http://blog.itpub.net/jlandzpa
mail: “id”@itpub.net

注意: [投资理财版] 业已提供上证指数菠菜,欢迎参与 :)

[头像] 黑木明纱 Meisa Kuroki  :)
只看该作者    顶部
离线 easyfree
去留无意 聚散两难


精华贴数 32
个人空间 0
技术积分 14126 (84)
社区积分 4061 (358)
注册日期 2001-9-24
论坛徽章:8
现任管理团队成员ITPUB元老ITPUB北京九华山庄2008年会纪念徽章管理团队2006纪念徽章会员2006贡献徽章授权会员
行业板块每日发贴之星ITPUB新首页上线纪念徽章    

发表于 2002-3-27 06:11 
难得糊涂

一个16进制的转换何必这么麻烦, 8i中使用to_char就搞定了

22:11:08 SQL> r
  1* select to_char(500,'XXXX') from dual

TO_CH
-----
  1F4

22:11:09 SQL>

嘿嘿, 有时问题就是如此简单


__________________
看我非我我看我我亦非我
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问