Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
PL/SQL中的子查询未返回任何数据_Sql_Exception_Plsql_Subquery - Fatal编程技术网

PL/SQL中的子查询未返回任何数据

PL/SQL中的子查询未返回任何数据,sql,exception,plsql,subquery,Sql,Exception,Plsql,Subquery,我正在查看的PL/SQL查询在确定记录计数时使用子查询: SELECT COUNT(*) INTO v_seqn FROM SIPR.KDX KDX WHERE KDX.KDX_STUC NOT IN ( SELECT ADD1.ADD_ADID FROM SIPR.MEN_ADD ADD1 WHERE ADD1.ADD_ADID = KDX.KDX_STUC) AND KDX.KDX

我正在查看的PL/SQL查询在确定记录计数时使用子查询:

SELECT COUNT(*)
INTO v_seqn
FROM SIPR.KDX KDX
WHERE KDX.KDX_STUC NOT IN ( SELECT ADD1.ADD_ADID
                            FROM SIPR.MEN_ADD ADD1
                            WHERE ADD1.ADD_ADID = KDX.KDX_STUC)
AND KDX.KDX_STUC = v_stud_id
AND KDX.KDX_SITS = 'A';
如果子查询不返回任何记录,这会导致可以处理的no_DATA_FOUND异常,还是完全有效,只会为主查询的“NOT IN”子句返回null,并导致计数为0


谢谢。

这将在满足其他条件的情况下从SIPR.KDX KDX获取所有行 在where子句中,但这是子查询的互斥结果。这是 类似于集合语言中的A-B-C,其中A是表,B是子查询,C是 where条款中的所有其他满足条件

尝试使用外部连接

SELECT
      COUNT ( * )
INTO
      V_SEQN
FROM
          (SELECT
                *
           FROM
                SIPR.KDX KDX
           WHERE
                KDX.KDX_STUC = V_STUD_ID
                AND KDX.KDX_SITS = 'A') TABLE1
      LEFT OUTER JOIN
          SIPR.MEN_ADD ADD1
      ON TABLE1.KDX_STUC = ADD1.ADD_ADID
WHERE
      ADD1.ADD_ADID IS NULL;
或使用不存在

SELECT
      COUNT ( * )
INTO
      V_SEQN
FROM
          (SELECT
                *
           FROM
                SIPR.KDX KDX
           WHERE
                KDX.KDX_STUC = V_STUD_ID
                AND KDX.KDX_SITS = 'A') TABLE1
  WHERE NOT EXISTS  
        (SELECT   
               1  
          FROM  
               SIPR.MEN_ADD ADD1  
          WHERE  
               TABLE1.KDX_STUC = ADD1.ADD_ADID)      

你不需要改变任何事情。如果子查询不返回任何行,那么主查询将不会有结果,但由于它是一个计数查询,没有任何
group by
具有子句
,因此它将始终只返回一行和一个值,可能是
0


它永远不会返回null,也不会给您一个“未找到数据”的异常。“找不到数据”异常不是SQL,而是PL/SQL错误,当您尝试将值
选择到变量中,但(主)选择没有返回任何行时,会发生该错误。

您尝试过运行它吗?在这种情况下,不会抛出
NO\u DATA\u FOUND
异常,并且
COUNT
将返回
0
。不幸的是,我自己没有访问环境的权限来测试它,我正在尝试帮助同事。遗憾的是,这里没有PLSQL专家,所以我呼吁so上的专家们::-)我知道,在这种情况下,正如我所说的,不会抛出
NO\u DATA\u FOUND
异常。如果您选择的是
<将>编码到
一些变量中,并且该查询将不会产生任何结果,然后您将得到
未找到任何数据
。在查询中,当子查询不返回任何行时,
COUNT(*)
将返回
0