2012-11-25 41 views
1

我創建了一個plsql程序來從替代變量中獲取employee_id。每當我嘗試輸入一個字母,我都會收到ORA-06550的錯誤消息作爲錯誤號。我把它放在異常部分,但它似乎沒有被提出。PL/SQL - 爲什麼ORA-06550不能陷入異常?

這裏的錯誤消息,當我輸入的替代變量「KK」 ......

Error report: 
ORA-06550: line 13, column 9: 
PLS-00201: identifier 'KK' must be declared 
ORA-06550: line 13, column 1: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

,這裏是我的PL/SQL塊

set serveroutput on 
set verify off 
declare 
    cursor cur(mid employees.employee_id%type) is 
    select e.last_name employee, 
     m.last_name manager 
    from employees e 
    join employees m 
     on m.employee_id = e.manager_id 
    where m.employee_id=mid; 

    rec cur%rowtype; 
    m_id employees.employee_id%type; 
    ex exception; 
    pragma exception_init(ex, -06550); 

begin 
    m_id := &id; 
    open cur(m_id); 
    fetch cur into rec; 
    dbms_output.put_line('here '||rec.employee || ' ' || rec.manager); 
    close cur; 

exception 
    when ex then dbms_output.put_line('employee_id was not a valid number'); 
end; 
/

做的人都知道,爲什麼我不能陷阱例外?

回答

1

我希望我能發表評論。你不能更改你的代碼:

m_id := '&id'; 

所以你不需要陷入這個異常。

更新捕獲大量的異常:

declare 
    (...) 
begin 
    m_id := to_number('&id'); 
    (...) 
exception 
    when VALUE_ERROR then 
     dbms_output.put_line('You provided invalid number'); 
end; 
+0

是的,我可以做到這一點,但我需要從用戶輸入一個數字,如果用戶輸入一個字母,這是唯一一次例外將陷入困境,我從中得到一些問題。 :) – Katherine

+0

我更新了我的anwser - 考慮這個.. ;-) –

4

您不能在運行時捕獲該異常,因爲這是編譯時錯誤。

M_ID:= &id;

嘗試輸入'KK'代替KK,否則會被解釋爲一個標識符。

+0

是的,它來自於替代變量。它的工作,謝謝。這是否意味着如果它沒有「',我不能捕獲錯誤? – Katherine

1

你的代碼是完全正確的。請使用員工ID而不是表格中的KK。它必須是一個數字。例如101或102

在您使用「m.employee_id = mid」的遊標的where子句中,employee_id的數據類型是數字。

謝謝:)