如何查看sql

时间:2018-08-07 19:01:40

标签: database oracle

我正在尝试查看内存中存储的char ASCII值,但是它将仅显示第一个char ASCII。我想完成存储在内存中的char结构 以前的名字char(10)  我正在通过abc 所以它应该显示int数组如下  67 68 69 32 32 32 32 32 32 32

这里有32个空格

2 个答案:

答案 0 :(得分:4)

如果只想查看存储的字节,则使用dump(),如果愿意,它将以十进制,十六进制甚至八进制显示。 Bob的仅从该输出中提取字节的方法很有用,如果重要的话,您可以选择用空格替换逗号。

如果您确实想查看十六进制值,也可以执行以下操作:

select name,
  cast(utl_raw.cast_to_raw(name) as varchar2(20)) as ascii
from your_table;

NAME       ASCII                         
---------- ------------------------------
abc        61626320202020202020          

作为获取十进制值的替代方法,您可以使用分层查询:

select name,
  listagg(ascii(substr(name, level, 1)), ' ') within group (order by level) as ascii
from your_table
connect by level <= length(name)
group by name;

NAME       ASCII                         
---------- ------------------------------
abc        97 98 99 32 32 32 32 32 32 32 

尽管要处理多个行会有些混乱,并且与简单地转储值相比,它正在做很多工作。

Bob略有不同,只是为了获得您显示的格式(当然这可能并不实际):

select name,
  dump(name) as dumped,
  trim(regexp_replace(dump(name), '((.*:)|,)', ' ')) as ascii
from your_table;

NAME       DUMPED                                        ASCII                         
---------- --------------------------------------------- ------------------------------
abc        Typ=96 Len=10: 97,98,99,32,32,32,32,32,32,32  97 98 99 32 32 32 32 32 32 32 

(除非您的字符集是US7ASCII,否则它不是真正的ASCII;它是数据库字符集中的十进制表示形式...但是通常会忽略这种区别。对于非ASCII,这些都将为您提供值(> 127)字符)。

答案 1 :(得分:3)

一种方法是DUMP字符串,然后从输出中获取字节码列表:

SELECT SUBSTR(REGEXP_SUBSTR(DUMP('a b c d'), ':.*'), 3) FROM DUAL;

在您的情况下,您想做类似的事情

SELECT SUBSTR(REGEXP_SUBSTR(DUMP(YOUR_COLUMN_NAME), ':.*'), 3)
  FROM YOUR_TABLE

SQLFiddle here

好运。