Oracle11g 存在数据时未找到数据

Oracle11g 存在数据时未找到数据,oracle11g,sqlplus,Oracle11g,Sqlplus,我遇到了这种奇怪的情况,我不知道我做错了什么: 为了简化问题,我有一个名为ABC的表,其结构如下: MyValue varchar2(10) MyKey Number 这是我在ABC表中的数据集 null, 1 null, 2 null, 3 'WYZ', 4 我有一个功能: function DEF RETURN varchar2 is v varchar2(10); Begin SELECT "MyValue" INTO v WHERE "MyKey"<5 and "My

我遇到了这种奇怪的情况,我不知道我做错了什么:

为了简化问题,我有一个名为ABC的表,其结构如下:

MyValue varchar2(10)
MyKey  Number
这是我在ABC表中的数据集

null, 1
null, 2
null, 3
'WYZ', 4
我有一个功能:

function DEF
RETURN varchar2
is
v varchar2(10);
Begin
  SELECT "MyValue" INTO v
  WHERE "MyKey"<5 and "MyValue" is not null;
  RETURN v;
End;
函数定义
返回varchar2
是
v varchar2(10);
开始
在v中选择“MyValue”

在“MyKey”中,您可以提供一个可复制的测试用例(DDL来创建表,DML来填充数据,以及抛出错误的代码)?你说的没有道理,所以你描述中的某些东西一定是错的。表中的数据不是您发布的数据(可能是因为您在一个会话中有未提交的更改,而这些更改在另一个会话中是不可见的),或者您发布的代码不是引发错误的真正原因。或者函数可能在不同的模式中看到具有相同名称的表?你在一个模式中做所有事情吗?@JustinCave:Justin,你可能是对的。它是一个复杂的数据库,包含多个表、视图和关系,因此向您提供可复制的测试用例是不可行的。但很可能我看到的错误实际上并不是你指出的我怀疑的代码。您已经帮助我缩小了问题范围,并简化了故障排除过程,因为您已经确认了上面的代码是正确的。我将验证sp内的其他块,并检查是否有未提交的更改。@AlexPoole:谢谢您查看它。一切都只在一个模式中,但却是一个非常复杂的模式。贾斯汀可能是对的,错误可能是由另一个块引起的,而不是这个块。