0
我想創建一個內聯oracle函數,該函數將引用正在提取的當前行的列值並根據我的條件返回一個值。我通過將ROWID傳入函數來嘗試,並且函數體中的當前行將使用ROWID獲取並操作值。如何將當前行傳遞給oracle用戶定義的函數
CREATE FUNCTION CHECK_STATUS(P_ROWID) RETURN VARCHAR2 IS
V_ROW MY_TBL%TYPE
BEGIN
SELECT * INTO V_ROW FROM MY_TBL WHERE ROWID=P_ROWID;
IF V_ROW.COL1 IS NOT NULL AND
V_ROW.COL2 IS NOT NULL AND
V_ROW.COL3 IS NOT NULL THEN
RETURN 'OK';
ELSE
RETURN 'INCOMPLETE';
END IF;
END;
此功能在不同的地方還呼籲爲
SELECT A.*,CHECK_STATUS(ROWID) FROM MY_TBL A;
它的工作原理,但會減慢查詢不好過千的記錄,因爲每個讀取的行功能將再次做一個選擇查詢用於獲取列值。我知道,這也可以做到
CREATE FUNCTION CHECK_STATUS(COL1,COL2,COL3) RETURN VARCHAR2 IS
這裏的問題是,我想幾乎檢查功能9倍的值,它看起來很奇怪的函數的每次調用期間寫的列名。我懷疑是否有該功能可以參考當前行被獲取,而無需通過參數類似接收ROWID /列
謝謝......你是對的......虛擬專欄的目的......沒有想到,因爲我們剛剛從10g轉移到11g ..將很快嘗試.. – Mahesh