日期:2014-05-16  浏览次数:20780 次

救命啊,涵数中的COUNT执行问题!
本帖最后由 aquaqu2009 于 2014-03-18 21:50:28 编辑


CREATE OR REPLACE FUNCTION test(aquid INT,aquname VARCHAR2,aqubz VARCHAR2) RETURN INT 
IS
    re int;
BEGIN
SELECT COUNT(1) into re FROM aqu  WHERE aquid=aquid;

RETURN re;
END;

aqu表中有数据3768条!
当我执行 select id,name,test(id,name,bz) total from killAqu where name='比比三九';
时结果为3768条,正确数应该为81条才对!
这是哪写错了,迷茫呃!
换成:
execute immediate strsql into re;
这要瓣写法就能返回正确数据!救救我这个菜鸟吧,大大们!
------解决方案--------------------
引用:

CREATE OR REPLACE FUNCTION test(aquid INT,aquname VARCHAR2,aqubz VARCHAR2) RETURN INT 
IS
    re int;
BEGIN
SELECT COUNT(1) into re FROM aqu  WHERE aquid=aquid;

RETURN re;
END;

aqu表中有数据3768条!
当我执行 select id,name,test(id,name,bz) total from killAqu where name='比比三九';
时结果为3768条,正确数应该为81条才对!
这是哪写错了,迷茫呃!
换成:
execute immediate strsql into re;
这要瓣写法就能返回正确数据!救救我这个菜鸟吧,大大们!


select id,name,test(id,name,bz) total from killAqu where name='比比三九'
返回的是killAqu中的数据啊,和test没关系啊,TEST每次都固定返回一条数据啊
------解决方案--------------------
引用:

CREATE OR REPLACE FUNCTION test(aquid INT,aquname VARCHAR2,aqubz VARCHAR2) RETURN INT 
IS
    re int;
BEGIN
SELECT COUNT(1) into re FROM aqu  WHERE aquid=aquid;

RETURN re;
END;

aqu表中有数据3768条!
当我执行 select id,name,test(id,name,bz) total from killAqu where name='比比三九';
时结果为3768条,正确数应该为81条才对!
这是哪写错了,迷茫呃!
换成:
execute immediate strsql into re;
这要瓣写法就能返回正确数据!救救我这个菜鸟吧,大大们!


select id,name,test(id,name,bz) total from killAqu where name='比比三九' AND EXISTS(
 SELECT 1 FROM aqu WHERE squ.aquid=killAqu.ID)

外面需要增加过滤条件。。
------解决方案--------------------
SELECT COUNT(1) into re FROM aqu  WHERE aquid=aquid; 
参数名最好不要和列名一样,容易出问题
------解决方案--------------------
引用:
SELECT COUNT(1) into re FROM aqu  WHERE aquid=aquid; 
参数名最好不要和列名一样,容易出问题

正解,变量名不要与字段用相同的名字。。
------解决方案--------------------
帮顶,等大牛解决
------解决方案--------------------
引用:
SELECT COUNT(1) into re FROM aqu  WHERE aquid=aquid; 
参数名最好不要和列名一样,容易出问题

很是支持,以前我就遇到过这样的情况。
------解决方案--------------------
马了个克的。