2015-06-20 31 views
0

我想通過兩個獨立的表來搜索特定值的COUNT並從一個函數返回它的數量的總和。返回兩個單獨的表PL/SQL

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查詢的值,並返回結果?

任何幫助表示讚賞。

+0

您在註釋掉查詢選擇'AS' sub_exists而不是選項'INTO';當你之前嘗試過時,你是如何擁有它的?如果是這樣,那聽起來像是你的問題。 –

+0

是的,我想既是而成。當我使用INTO時,它不會編譯並拋出'PL/SQL:ORA-01744:不適當的INTO'異常。當我使用AS時,它不會編譯。 – corporateWhore

+0

@corporateWhore你不想使用兩個單獨的查詢任何理由嗎? – Hawk

回答

0

如果你仍然想擁有它在一個查詢,這裏是

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; 
+0

完美,謝謝! – corporateWhore

0

我沒有找到一個理由不使用兩個單獨的查詢。然後你可以返回兩者的總和。你可以簡單地寫這樣的事:

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; 
+0

我原本是這麼做的,但決定嘗試單個查詢,因爲我想學習語言和思想這將是一個很好的做法。 – corporateWhore