Oracle 11g 快捷版 11.2.0
表“RIGHT”数据(仅包含 1 行,名称 = Test):
身份证 | 姓名
1 测试
2 新 2
3 新14
...
从正确的地方选择计数(*)名称='测试';
结果 = 1
我在包 TEST 中有程序:
create or replace
PACKAGE BODY TEST
AS
PROCEDURE FIND_RIGHT(rightName IN VARCHAR2)
IS
countrows NUMBER;
BEGIN
SELECT COUNT(*) INTO countrows FROM RIGHT WHERE name = rightName;
/* DEBUG POINT !!! in this point countrows = 212 !!!! */
...
END;
END TEST;
并从其他程序运行它:
DECLARE
rightName VARCHAR2(200);
BEGIN
rightName := 'Test';
TEST.FIND_RIGHT(rightName);
END;
我在选择后运行调试器(在 Oracle SQL Developer 中)和调试点。我看到countrows = 212。
为什么Countrows != 1 ???
更新: 所有事务都已提交。仅打开 1 个会话(来自 SQL Developer)。表权限有 3 个索引(表很大,我不会在帖子中写所有列)。程序有许多输入参数(自定义对象),但我删除了额外的信息。
更新#2: 我将代码更改为
create or replace
PACKAGE BODY TEST
AS
PROCEDURE FIND_RIGHT(rightName IN VARCHAR2)
IS
countrows NUMBER;
testVar VARCHAR2(200);
BEGIN
testVar := 'Test';
SELECT COUNT(*) INTO countrows FROM RIGHT WHERE name = testVar;
/* in this point countrows = 1 */
...
END;
END TEST;