SQL*Plus - 数字列显示十六进制字符

Posted

技术标签:

【中文标题】SQL*Plus - 数字列显示十六进制字符【英文标题】:SQL*Plus - numeric column shows hex characters 【发布时间】:2015-06-24 03:34:06 【问题描述】:

在 SQL*Plus 中进行数据透视报告,计算状态为“错误”的记录数并在结果中遇到十六进制值。可以使用以下方法在 11g 上重现它:

SQL> select 1 error from dual;

     ERROR
----------
##########

然后我测试了几个品种:

SQL> select 1 errors from dual;

    ERRORS
----------
         1

SQL> select 'a' error from dual;

ERROR
-----------------------------------------------------------------
a

SQL> select 'a' errors from dual;

E
-
a

似乎有一个名为“错误”的列会对您在 SQL*Plus 中的结果产生奇怪的影响,因为 SQL 开发人员不会发生此问题。有人有解释吗? 除了重命名它似乎没有解决方法..

【问题讨论】:

这似乎是 SQL*Plus 中的一个怪癖(错误)。因此,重命名列或将其转换为字符串。 【参考方案1】:

看起来ERROR 列的NUMBER 格式默认设置在SQL*Plus 中。

ATTRIBUTE 命令显示这个的格式。

SQL> attribute error
COLUMN   ERROR ON
FORMAT   A65
word_wrap 

所以,让我们清除它。

SQL> column error clear

现在,

SQL> select 12 error from dual;

     ERROR
----------
        12

完整脚本:

SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 24 04:26:15 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> attribute error
COLUMN   ERROR ON
FORMAT   A65
word_wrap 

SQL> show numwidth
numwidth 10

SQL> select 12 error from dual;

     ERROR
----------
##########

SQL> column error clear

SQL> attribute error
SP2-0046: ATTRIBUTE 'error' not defined

SQL> select 12 error from dual;

     ERROR
----------
        12

SQL> column error format A10

SQL> select 12 error from dual;

     ERROR
----------
##########

【讨论】:

【参考方案2】:

这只是一个workarround,但你可以将你的int转换为char。

SQL> select cast(1 as char(50)) as error from dual;`

ERROR
---------
1

【讨论】:

以上是关于SQL*Plus - 数字列显示十六进制字符的主要内容,如果未能解决你的问题,请参考以下文章

将非常大的数字转换为十六进制字符串

如何在python中将十六进制字符串转换为二进制以使用cx_oracle插入

如何用十六进制数字初始化uipicker

如何将看起来像十六进制数字的字符串转换为php中的实际十六进制数字?

如何将十六进制字符串转换为十六进制数字 [重复]

如何在Java中将字符从字母字符转换为十六进制数字?