【问题标题】:Return the sum of the count of two seperate tables PL/SQL返回两个独立表 PL/SQL 的计数之和
【发布时间】:2023-03-22 07:58:01
【问题描述】:

我正在尝试在两个单独的表中搜索特定值的 COUNT 并从函数中返回它。

  FUNCTION check_parts
    (p_partno         IN  VARCHAR2)
    RETURN NUMBER
  IS
    out_exists  NUMBER;
    sub_exists  NUMBER;
  BEGIN

    SELECT COUNT(*) INTO out_exists
    FROM outline_pn op
    WHERE op.outline_pn = p_partno
    UNION ALL
    SELECT COUNT(*)
    FROM sub_pn sp
    WHERE sp.sub_assy_pn = p_partno;
--      SELECT (SELECT COUNT(*) AS out_exists
--              FROM outline_pn op
--              WHERE op.outline_pn = p_partno) AS out_exists,
--              (SELECT COUNT(*) AS sub_exists
--              FROM sub_pn sp
--              WHERE sp.sub_assy_pn = p_partno) AS sub_exists


      RETURN (out_exists + sub_exists);
  END check_parts;

起初我天真地认为两个单独的 COUNT(*) 查询会起作用……但没有。

如何将两个单独的COUNT 查询的值相加并返回结果?

感谢任何帮助。

【问题讨论】:

  • 您在注释掉的查询中选择AS sub_exists 而不是INTO;当你之前尝试过时,你就是这样吗?如果是这样,这听起来像你的问题。
  • 是的,我尝试了 AS 和 INTO。当我使用 INTO 时,它不会编译并抛出一个 'PL/SQL: ORA-01744: inappropriate INTO' 异常。当我使用 AS 时,它不会编译。
  • @corporateWhore 有什么理由不想使用两个单独的查询?
  • @corporateWhore 如果您的问题得到解答。请接受一个答案。在这里了解更多 - meta.stackexchange.com/questions/23138/…

标签: database oracle plsql oracle12c


【解决方案1】:

如果您仍想在一个查询中使用它,这里是选项

  create FUNCTION check_parts
    (p_partno         IN  VARCHAR2)
    RETURN NUMBER
  IS
    sum_exists  NUMBER;
  BEGIN

  select count(1) into sum_exists from (
    SELECT outline_pn
    FROM outline_pn op
    WHERE op.outline_pn = p_partno
    UNION ALL
    SELECT sub_assy_pn
    FROM sub_pn sp
    WHERE sp.sub_assy_pn = p_partno);


      RETURN (sum_exists);
  END check_parts;

【讨论】:

    【解决方案2】:

    我找不到不使用两个单独查询的理由。然后你可以返回两者的总和。你可以简单地写这样的东西:

    FUNCTION check_parts   
    (p_partno         IN  VARCHAR2)
    RETURN NUMBER
    IS
    out_exists  NUMBER;
    sub_exists  NUMBER;
    BEGIN
    
    SELECT COUNT(*) INTO out_exists
    FROM outline_pn op
    WHERE op.outline_pn = p_partno;
    
    SELECT COUNT(*) INTO sub_exits
    FROM sub_pn sp
    WHERE sp.sub_assy_pn = p_partno;
    
    
    RETURN (out_exists + sub_exists);
    END check_parts;
    

    【讨论】:

    • 我最初是这样做的,但决定尝试单个查询,因为我想学习该语言并认为这是一个很好的做法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多