返回两个独立表 PL/SQL 的计数之和
Posted
技术标签:
【中文标题】返回两个独立表 PL/SQL 的计数之和【英文标题】:Return the sum of the count of two seperate tables PL/SQL 【发布时间】:2015-06-20 01:31:02 【问题描述】:我正在尝试在两个单独的表中搜索特定值的 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/…
【参考方案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;
【讨论】:
我最初是这样做的,但决定尝试单个查询,因为我想学习该语言并认为这是一个很好的做法。以上是关于返回两个独立表 PL/SQL 的计数之和的主要内容,如果未能解决你的问题,请参考以下文章
Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结
在使用 Entity Framework 数据库优先在表上插入行之前,如何从 PL/SQL 执行触发器?
如何在选择语句的“NOT IN”子句中使用逗号分隔的字符串列表作为 pl/sql 存储的函数参数
PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决(代码