我已經尋找了一段時間來解決這個問題,並且我找到的所有NO_DATA_FOUND處理教程都只顯示瞭如何在只有一列的Select Into時執行此操作變量。使用Select Into MULTIPLE變量處理異常處理
首先,這裏是我的代碼:
BEGIN
OPEN c_no_source;
LOOP
DECLARE
l_price_code VARCHAR2(20) := '';
l_price_level VARCHAR(10) := '';
l_code_date DATE := p_effective_date;
BEGIN
FETCH c_no_source INTO c_no_source_row;
exit WHEN c_no_source%NOTFOUND;
BEGIN
WITH codeList AS /* liste des dates ayant une donnée avant la date effective incluse. */
(
SELECT distinct
NVL(effective_date,p_effective_date) as effective_date,
NVL(user_group2,'') as price_code,
NVL(user_group3,'') as price_level
FROM DGA_Service.Hjvsecmaster_Hist
WHERE effective_date <= p_effective_date
AND user_group2 IS NOT NULL
AND security_alias = c_no_source_row.security_alias
ORDER BY 1 DESC
)
SELECT price_code, price_level, effective_date
INTO l_price_code, l_price_level, l_code_date
FROM codelist
WHERE ROWNUM = 1;
EXCEPTION WHEN no_data_found THEN NULL;
...
[UPDATE statement using the variables]
...
END;
END;
END LOOP;
CLOSE c_no_source;
END;
我想要做的就是把我的設置爲三個不同的變量codeList
臨時結果的頂部1的結果。 然而,codeList
中的三列中的一列往往是NULL
。我的3個變量都不會被設置。 我試圖處理異常,但我無法讓我的代碼插入有值的列到它們各自的變量中。如果即使其中一列爲NULL,也不會將它們插入到它們的變量中。
我想選擇進入語句來設置它可以設置的變量。
我試圖單獨處理它們全部使用這樣的事情:
EXCEPTION WHEN NO_DATA_FOUND THEN
BEGIN
IF price_code IS NOT NULL THEN l_price_code := price_code; END IF;
IF price_level IS NOT NULL THEN l_price_level := price_level; END IF;
IF effective_date IS NOT NULL THEN l_code_date := effective_date; END IF;
END;
,但我得到了以下錯誤消息:
ORA-06550: line 294, column 18:
PLS-00201: identifier 'PRICE_CODE' must be declared
ORA-06550: line 294, column 15:
PL/SQL: Statement ignored
ORA-06550: line 295, column 18:
PLS-00201: identifier 'PRICE_LEVEL' must be declared
ORA-06550: line 295, column 15:
PL/SQL: Statement ignored
ORA-06550: line 296, column 18:
PLS-00201: identifier 'EFFECTIVE_DATE' must be declared
ORA-06550: line 296, column 15:
PL/SQL: Statement ignored
所以我跑出的想法。我試圖指定臨時表名稱,無濟於事,像這樣:
IF codeList.price_code IS NOT NULL
我想在這個問題上的任何幫助。這段代碼運行的包已經很重了,我不希望每個列都帶有單獨的With ... As() Select Into
子句。
@在第一個原始代碼塊中,如果拋出異常,我執行NULL。最常見的情況是'codeList'表有5到10行,但每行都有3列NULL中的一列。 我認爲這是'NO_DATA_FOUND'錯誤,因爲當我剛剛使用'EXCEPTION WHEN no_data_found THEN NULL;'我的3個變量都沒有設置,即使其中2個應該已經設置。我可能會誤解,在這種情況下,我不知道爲什麼我的變量沒有設置具有值的列。 – EplusL
我只想找到一種方法來抓取循環中的每一行,並設置任何我有價值的變量,然後用''設置其他變量。 – EplusL