我對PL/SQL函數有問題。我試圖得到一個結果,這取決於聲明中的限制。如果沒有結果匹配,結果應該爲空。Oracle函數結果不同於select語句的結果
如果我直接在表status_history上執行select語句,我會得到正確的結果。如果我執行該功能,我會得到一個不屬於veh_id範圍的id。它的另一個ID來自表格。所以我得到了一個結果,但我期望沒有結果。
下面是函數:
CREATE OR REPLACE FUNCTION is_inventory (
veh_id NUMBER,
status_date DATE) RETURN NUMBER IS
cnt number;
BEGIN
SELECT sh.id
INTO cnt
FROM status_history sh
WHERE sh.veh_id = veh_id
AND sh.code >= 100
AND sh.code < 200
AND sh.id =
(SELECT id
FROM ( SELECT sh2.id, sh2.status_date, sh2.code
FROM status_history sh2
WHERE sh2.veh_id = veh_id
AND sh2.status_date <= status_date
ORDER BY sh2.status_date DESC, sh2.code DESC)
WHERE ROWNUM = 1);
if cnt > 0 THEN
RETURN cnt;
else
RETURN cnt;
END IF;
END is_inventory;
/
也許功能可以寫好多了,但是我想我應該得到同樣的結果,如果我執行的功能或者直接在SQL語句。
在generell函數的結果不應該返回id。我第一次嘗試計數,但對於調試,我將結果更改爲id。
謝謝你的幫助。
用示例數據構建一個小例子,那麼我們將能夠提供幫助! –
你是否從函數中取出EXACT語句並單獨執行它?要麼你的輸入是不同的,要麼sql是不同的。 – OldProgrammer