为什么我从同一个查询中得到两个不同的结果

用户13541818

我创建了一个返回用户电子邮件是否存在的函数

FUNCTION USER_EXISTS(email IN VARCHAR2)
    RETURN SYS_REFCURSOR IS 
    rc  SYS_REFCURSOR;
    /*userExists*/
BEGIN
  OPEN rc FOR
       SELECT count(*) as does_user_exist
        FROM users 
            WHERE Email  
                 LIKE '%' || email || '%';
  RETURN rc;
END USER_EXISTS;

我注意到的问题是,当我调用这个函数时,我得到的结果是72用户存在这个电子邮件地址

SELECT USER_PACKAGE.USER_EXISTS('%zl%') FROM DUAL

在此处输入图片说明

但是当我调用SELECT语句时

SELECT COUNT(*) FROM USERS WHERE Email LIKE '%zl%'

我得到结果

在此处输入图片说明

这里有什么问题?我哪里做错了?

罗伯托·埃尔南德斯

原因是该函数是错误的,因为它是一个 sys_refcursor 对象,适用于整个表。

该函数中不需要 sys_refcursor 对象,只需正常计数即可。

例子

SQL> create table tb_users ( id number generated by default on null as identity ( start with 1 increment by 1 ) , email varchar2(100) ) ;

SQL> insert into tb_users ( email ) values ( '[email protected]' ) ;

SQL> insert into tb_users ( email ) values ( '[email protected]' ) ;

SQL> commit ;

Table created.

1 row created.

1 row created.

Commit complete.

SQL> select count(*) from tb_users where email like '%z1%' ;

  COUNT(*)
----------
         1

SQL> create or replace FUNCTION USER_EXISTS(email IN VARCHAR2)
    RETURN SYS_REFCURSOR IS
    rc  SYS_REFCURSOR;
    /*userExists*/
BEGIN
  OPEN rc FOR
       SELECT count(*) as does_user_exist
        FROM tb_users
            WHERE Email
                 LIKE '%' || email || '%';
  RETURN rc;
 END USER_EXISTS;
 /

Function created.

SQL> select user_exists('%z1%') from dual ;

USER_EXISTS('%Z1%')
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

DOES_USER_EXIST
---------------
              2

rc 为表中的每个记录计数返回 1。因此,您的表中可能有 72 条记录,这就是 72 的原因。

更新

这样的功能在您的场景中会更好地工作

SQL> create or replace FUNCTION USER_EXISTS(pemail IN VARCHAR2)  RETURN number
is
rc number;
BEGIN
     SELECT count(*) into rc FROM tb_users
            WHERE Email
                 LIKE '%' || pemail || '%';
  RETURN rc;
  9  END USER_EXISTS;
 10  /

Function created.

SQL> select USER_EXISTS(pemail => 'z1') from dual ;

USER_EXISTS(PEMAIL=>'Z1')
-------------------------
                        1

SQL>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从同一个表列两个查询结果的身高和体重

我可以从同一个jar文件执行两个不同的类吗?

为什么不能在两个dom元素中追加同一个孩子?

为什么两个绑定到同一个函数会返回不同的值

为什么同一个CSS不用于两个圈子

如何在同一个表上合并两个查询以在MySQL中获得单个结果集

如何建立两个表在两个表中的一个查询?我想要得到与原始结果相同的结果

为什么我得到两个不同的结果?(带有布尔值的问题)

为什么对于具有不同库的同一个wav文件,我得到的采样率不同?

du对同一个文件给出两个不同的结果

为什么同一个磁盘读取测试结果如此不同

为什么这两个路由器不能在同一个网络中工作?

为什么这个 javascript 函数为同一个查询返回两个不同的结果?

为什么指向同一个对象的两个对象实例中的一个在将 NULL 分配给它们中的任何一个时表现不同?

在 Opaleye 中,如何在同一个查询中插入两个表?

TensorFlow:为什么我在同一个地方运行两次这段代码没有更新任何参数,我得到了不同的结果?

在同一个 ng-repeat 中迭代两个不同的数组

为什么两个接口不能属于同一个子网?

为什么我从同一个神经网络模型得到不同的预测?

为什么elasticsearch 对不同索引的同一个查询返回的结果差别太大?

SQL Server 查询从同一个表中提取两个不同的行

为什么 MySQL View 和同一个 View 的底层 SELECT 查询返回不同的结果?

同一个查询结果不同的文档

为什么我们将同一个节点连接到两个不同实例的两个不同节点?

为什么 Canvas 在同一个 html 文档中的两个单独的 canvas 元素上以不同的方式绘制相同宽度和长度的相同图像?

C - 我从同一个变量得到两个不同的指针

为什么同一个笔记本在两个不同的环境中分配大量不同的 vram?

如何在同一个查询中对两个表计数求和?

为什么同一个指针的地址不同?