Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是Oracle SQL错误吗?_Sql_Oracle_Plsqldeveloper - Fatal编程技术网

这是Oracle SQL错误吗?

这是Oracle SQL错误吗?,sql,oracle,plsqldeveloper,Sql,Oracle,Plsqldeveloper,我的表中有一个名为TNAME的列,类型为nvarchar2(8)。如您所见,长度为8。表中有一些记录,所有记录在该列中都有8个符号。选择该列时,该值仅包含7个符号。如果我从mytable中选择长度(TNAME),结果是8 请看图片。 你知道为什么会这样吗 另一张图片 查询是正确的。如您所见,记录与您的条件相匹配CMN00632。之所以只得到3的结果,是因为GUI切断了该值。尝试调整列的大小TNAME,您将看到整个值。这是因为在设置中,您已将某个位置设置为显示列数据最多7个字符 若在命令提示符

我的表中有一个名为
TNAME
的列,类型为
nvarchar2(8)
。如您所见,长度为8。表中有一些记录,所有记录在该列中都有8个符号。选择该列时,该值仅包含7个符号。如果我
从mytable
中选择长度(TNAME),结果是8

请看图片。

你知道为什么会这样吗

另一张图片


查询是正确的。如您所见,记录与您的条件相匹配
CMN00632
。之所以只得到
3
的结果,是因为GUI切断了该值。尝试调整列的大小
TNAME
,您将看到整个值。

这是因为在设置中,您已将某个位置设置为显示列数据最多7个字符

若在命令提示符下执行查询,将看到正确的结果

在编辑器中执行下面的查询,并查看查询结果。

选择“123456789”作为商户测试

我打赌这将在您正在使用的编辑器中给出结果为1234567


还有一个基本问题您认为通过您的查询可以在图像中显示行吗?

让我们非常清楚这一点:Oracle不是世界上最昂贵的数据库,因为它习惯性地断言
('CMN00632'='CMN0063')是正确的
。因此,问题存在于您的设置中,无论是在您的环境配置中还是在您的数据本身中

您仍然坚信GUI没有问题。我们无法验证这一点。然而,如果你错了,你是唯一受影响的人,所以我们就假设你是对的

另一种可能是您的数据以某种方式损坏,可能是非打印字符。此问题是影响ebvery行还是仅影响表中的某些值

无论哪种方式,您都可以运行一个简单的检查:

select dump(tname) 
from merchants 
where tname = 'CMN00632';
输出应该是该字符串的ASCII值:
67,77,78,48,48,48,51,50

顺便提一下,要证明没有与该列相关联的截断格式是非常简单的:使用列别名。这个查询返回什么

select tname as some_new_name 
from merchants 
where tname = 'CMN00632';

我想说你的GUI只是把那个列太窄了。如果您的查询确实返回的行的值不是
'CMN00632'
,那么是的,因为您的数据库不知道
=
是什么意思,所以存在严重错误。我支持Wooble的假设。我也会怀疑GUI在最后会切断这2个。宽度没有问题@呜呜,看起来怎么样好的。这就是问题所在。长度为8,值为7。where中有CMN00632,resultIf中有CMN0063如果
where
子句确实产生了您声称的结果,您可能需要切换到一个有效的数据库。虽然我怀疑人们现在已经注意到,如果在Oracle中,
=foo
的意思是
像foo%
,你是错的。整个值是CMN0063,而不是CMN00632@levi不,DerekFloss是正确的。如果值为CMN0063,则查询将不返回任何结果(因为WHERE子句中有CMN00632)。“投赞成票的回答。”弗兰克施密特,不!它的结果和那一点@levi我不知道你所说的“it results and that the point”是什么意思,但是你确实在你的查询中加入了“where tname='CMN00632”,因此你不会得到任何带有tname'CMN0063'的结果。由于您似乎正在使用PL/SQL Developer,请尝试在命令窗口中运行此命令,或者尝试增加列宽(正如其他人向您建议的那样)-您将看到您的列值确实是“CMN00632”。@levi:What you get for
选择“CMN00632”作为来自商家的测试@FahimParkar-任何环境格式都将与列名而不是表关联。