2015-10-08 64 views
3

我在將變量放在HAVING子句中遇到一些麻煩,問題是我需要COUNT(*)大於變量。HAVING子句中的Oracle PL/SQL變量

我使用Oracle數據庫XE 11.2

DECLARE 


    cnt1 NUMBER; 
    cnt2 NUMBER; 
    res NUMBER; 
BEGIN 
    SELECT COUNT(*) 
    INTO cnt1 
    FROM BESTELLING; 

    SELECT COUNT(*) 
    INTO cnt2 
    FROM ARTIKEL; 

    res := cnt1/cnt2; 
END; 
/

SELECT A.Naam, COUNT(*) AS HOEVEEL_VERKOCHT 
FROM Artikel A, Winkelwagen W 
WHERE A.Artikel_ID = W.Artikel_ID 
AND W.Datum_Besteld IS NOT NULL 
GROUP BY A.Naam 
HAVING COUNT(*) > ?res? 
ORDER BY COUNT(*) DESC; 
+0

但你的SQL查詢是* PL/SQL塊外的*。顯然,它將無法訪問PL/SQL塊中定義的任何變量。 – sstan

+0

那麼你會怎麼做呢? – Guido

回答

2

地查詢在主查詢,子查詢:

....... 
HAVING COUNT(*) > 
    ( SELECT COUNT(*) FROM BESTELLING) /
    ( SELECT COUNT(*) FROM ARTIKEL) 
ORDER BY COUNT(*) DESC; 
+0

謝謝,這適用於我((: – Guido

1

這樣的方式不會工作?

DECLARE 


    cnt1 NUMBER; 
    cnt2 NUMBER; 
    result NUMBER; 
BEGIN 
    SELECT COUNT(*) 
    INTO cnt1 
    FROM BESTELLING; 

    SELECT COUNT(*) 
    INTO cnt2 
    FROM ARTIKEL; 

    result := cnt1/cnt2; 
SELECT A.Naam, res, COUNT(*) AS HOEVEEL_VERKOCHT 
FROM Artikel A, Winkelwagen W 
WHERE A.Artikel_ID = W.Artikel_ID 
AND W.Datum_Besteld IS NOT NULL 
GROUP BY A.Naam, res 
HAVING COUNT(*) > result 
ORDER BY COUNT(*) DESC; 

END; 
/

我變變資源造成的,因爲它似乎你有列名爲res從PL/SQL直接

+0

不,我在執行此操作時遇到此錯誤: PLS-00428:在此SELECT語句中預計會出現INTO子句 – Guido

+0

並且非常感謝您指出我仍然保留在SELECT中,這是一個意外。我更新了代碼。 – Guido

+0

我們可以將其添加到變量中,但是您想要將其刪除還是要插入表中? – Moudiz