Oracle 11g Express Edition 11.2.0
表“RIGHT”数据(仅包含1行,名称= Test):
Id |名称
1测试
2 New2
3 New14
...
SELECT COUNT(*)FROM RIGHT WHERE name ='Test';
结果= 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中)和调试点。 我看到国家= 212。
为什么是国家!= 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;
答案 0 :(得分:3)
我猜您的表中包含一个名为“rightName”的列?
如果是这种情况,您的原始查询将比较“name”和“rightName”列而不是使用procedure参数。
尝试更改参数名称。