[英]Oracle pl/sql Procedure to update table - exception handling
這是我對PL / SQL的第一個查詢,無論如何,我確實花了一個小時試圖在網上找到答案。
我正在編寫一個更新表的過程,並且一切正常,但是當我鍵入以更新不存在的job_id
,我希望我的異常處理能告訴我job_id
無效,但是我沒有收到任何錯誤信息。
我的代碼如下:
CREATE OR REPLACE PROCEDURE UPD_JOB(p_job_id jobs.job_id%TYPE, p_jobnew jobs.job_title%TYPE)
IS
BEGIN
UPDATE JOBS SET job_title =p_jobnew WHERE JOB_ID = p_job_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No rows have been updated');
END;
/
然后,我嘗試通過鍵入以下內容來更新我不知道的job_id,以查看異常是否有效
EXECUTE UPD_JOB('ABCXXX','WILL FAIL');
NO_DATA_FOUND
SELECT INTO語句不返回任何行,或者您的程序引用嵌套表中的已刪除元素或索引表中的未初始化元素。 SQL聚合函數(例如AVG和SUM)始終返回值或null。 因此,調用聚合函數的SELECT INTO語句永遠不會引發NO_DATA_FOUND。 預期FETCH語句最終將不返回任何行,因此,在發生這種情況時,不會引發任何異常。
您沒有使用會導致引發NO_DATA_FOUND
異常的語句。
也許您可以使用SQL%ROWCOUNT
。 從“從PL / SQL執行SQL操作”中 :
要了解DML語句影響多少行,可以檢查
SQL%ROWCOUNT
的值...
CREATE OR REPLACE PROCEDURE UPD_JOB (p_job_id jobs.job_id%TYPE,
p_jobnew jobs.job_title%TYPE)
IS
BEGIN
UPDATE JOBS
SET job_title = p_jobnew
WHERE JOB_ID = p_job_id;
IF SQL%ROWCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE('No rows have been updated');
END IF;
END;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.