我在数据库(oracle sql)中有一个表,它以某种方式在最后包含一个我不知道的特殊字符。我试图从它在表中的条目中获取该特殊字符tab
。
SQL> SELECT tname from tab where tname='OPERATION';
no rows selected
SQL> SELECT tname from tab where tname like 'OPERATION%';
TNAME
--------------------------------------------------------------------------------
OPERATION
SQL> SELECT length('OPERATION') from tab where tname like 'OPERATION%';
LENGTH('OPERATION')
------------------------
9
SQL> SELECT length(tname) from tab where tname like 'OPERATION%';
LENGTH(TNAME)
-------------
10
Run Code Online (Sandbox Code Playgroud)
所以,N
string 中的char 后面有一个特殊字符OPERATION
。我尝试使用最后一个字符,substr
但这没有帮助。
我怎样才能找到这个特殊ascii
字符(甚至这个字符的价值)?
我怎样才能运行select
这个表中的数据?
您可以尝试使用该dump
函数来获取存储的实际字节值。例如,我刚刚创建了一个 table "OOUPS "
,最后有一个空格。
> select table_name, dump(table_name) from user_tables;
...
OOUPS Typ=1 Len=6: 79,79,85,80,83,32
...
Run Code Online (Sandbox Code Playgroud)
您可以看到 32 (0x20 hex) 作为最后一个字符 - 这是一个 ASCII 空间。
找到额外字符后,您可以在名称周围使用双引号查询表。这是区分大小写的,因此请确保您也匹配。例如:
create table "OOUPS " (a int);
insert into "OOUPS " (a) values (42);
commit;
select * from "OOUPS ";
Run Code Online (Sandbox Code Playgroud)
而且当然:
alter table "OOUPS " rename to more_sane_name;
Run Code Online (Sandbox Code Playgroud)
如果您不能轻松输入奇怪的字符,最简单的方法是创建一个 SQL 脚本,或者将确切的字符序列通过管道传输到 SQL*Plus:
OOUPS Typ=1 Len=6: 79,79,85,80,83,13
Run Code Online (Sandbox Code Playgroud)
$ echo -e 'alter table "OOUPS\r" rename to saner_name;\nexit;' | sqlplus user/pass
...
Table altered.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5729 次 |
最近记录: |