Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL似乎忽略了我函数的WHERE子句_Oracle_Plsql_Oracle18c - Fatal编程技术网

Oracle PL/SQL似乎忽略了我函数的WHERE子句

Oracle PL/SQL似乎忽略了我函数的WHERE子句,oracle,plsql,oracle18c,Oracle,Plsql,Oracle18c,我有一个俱乐部成员表,其中有一列状态,a希望在下面的功能中将其用作过滤器。但是无论我作为函数参数传递什么数字,结果总是一样的。计数总是与整个表的寄存器总数一起出现 CREATE OR REPLACE FUNCTION fn_count_members (id_status in club.members.id_status%TYPE) RETURN NUMBER IS total club.members.id%TYPE:=0; BEGIN SELECT COUNT(id) INTO t

我有一个俱乐部成员表,其中有一列状态,a希望在下面的功能中将其用作过滤器。但是无论我作为函数参数传递什么数字,结果总是一样的。计数总是与整个表的寄存器总数一起出现

CREATE OR REPLACE FUNCTION fn_count_members
(id_status in club.members.id_status%TYPE)
RETURN NUMBER IS
total club.members.id%TYPE:=0;
BEGIN
    SELECT COUNT(id) INTO total 
    FROM club.members m
    WHERE m.id_status = id_status; 
    RETURN total; 
END;
以及查询:

select id_status, fn_count_members(1) as total from club.members;
我错过了什么? 谢谢。

这是错误的:

(id_status in club.members.id_status%TYPE)
 ---------
 this
因为,在where子句中使用时

结果是1=1并返回所有内容,根本不进行过滤

将参数重命名为,例如

(par_id_status in club.members.id_status%TYPE)
并将其用作

WHERE m.id_status = par_id_status
这是错误的:

(id_status in club.members.id_status%TYPE)
 ---------
 this
因为,在where子句中使用时

结果是1=1并返回所有内容,根本不进行过滤

将参数重命名为,例如

(par_id_status in club.members.id_status%TYPE)
并将其用作

WHERE m.id_status = par_id_status
你有两个问题:

创建或替换函数fn\u count\u成员 俱乐部中的p_id_状态。成员。id_状态%TYPE-将参数名称更改为 -一些不同于 -列名。 返回号码是 俱乐部成员总数。id%类型:=0; 开始 选择COUNTid进入总数 来自俱乐部成员 其中m.id\u status=p\u id\u status;-这里呢 返回总数; 终止 / 然后需要传入参数,而不是使用1:

选择id\U状态, fn\u计数\u成员SID\u状态总计 来自俱乐部会员; dbfiddle

您有两个问题:

创建或替换函数fn\u count\u成员 俱乐部中的p_id_状态。成员。id_状态%TYPE-将参数名称更改为 -一些不同于 -列名。 返回号码是 俱乐部成员总数。id%类型:=0; 开始 选择COUNTid进入总数 来自俱乐部成员 其中m.id\u status=p\u id\u status;-这里呢 返回总数; 终止 / 然后需要传入参数,而不是使用1:

选择id\U状态, fn\u计数\u成员SID\u状态总计 来自俱乐部会员;
Dfiddle

fn\u count\u members1!=fn\u计数\u成员SID\u状态。例如,只需将固定值1转换为id_statusLittlefoot就可以给出答案,并找到解决方法。要理解这个问题,您需要熟悉名称解析-如果相同的名称用于多个事物,会发生什么情况。在where子句中,一个id_状态由m限定,因此没有混淆。另一个不合格。在查询中,第一个选项是表中的一列。有这样一列,因此将使用它。它不会是传递给函数的参数。然后-除了Littlefoot所展示的之外,还有其他修复方法,但这是最好的选择。fn_count_members1!=fn\u计数\u成员SID\u状态。例如,只需将固定值1转换为id_statusLittlefoot就可以给出答案,并找到解决方法。要理解这个问题,您需要熟悉名称解析-如果相同的名称用于多个事物,会发生什么情况。在where子句中,一个id_状态由m限定,因此没有混淆。另一个不合格。在查询中,第一个选项是表中的一列。有这样一列,因此将使用它。它不会是传递给函数的参数。然后-除了Littlefoot所展示的,还有其他的修复方法,但这是最好的选择。非常感谢!非常感谢你!非常感谢你!非常感谢你!