1

代替変数から employee_id を取得する plsql プログラムを作成しました。文字を入力しようとすると、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;
/

その例外をトラップできない理由を誰かが知っていますか?

4

3 に答える 3

4

これはコンパイル時のエラーであるため、実行時にその例外をキャッチすることはできません。

m_id := &id;

'KK'の代わりに入力してみてくださいKK。そうしないと、識別子として解釈されます。

于 2012-11-25T13:08:27.883 に答える
1

あなたのコードは完全に正しいです。表にある KK の代わりに従業員 ID を使用してください。数値でなければなりません。たとえば、101 または 102

カーソルのwhere句では、「m.employee_id = mid」を使用しており、employee_idのデータ型は数値です。

ありがとう:)

于 2012-11-29T20:10:52.213 に答える
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;
于 2012-11-25T18:05:17.083 に答える