2

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;
4

1 回答 1

3

我猜你的表包含一个名为“rightName”的列?

如果是这种情况,您的原始查询将比较“name”和“rightName”列,而不是使用过程参数。

尝试更改参数名称。

于 2013-04-04T19:48:22.880 回答