Идентификатор должен быть объявлен? Ошибка PL/SQL

Вот программа, которую я написал:

set serveroutput on;
declare
  b empl.name1%type;
  r varchar;   --can i change this to r empl.designation%type; ?
begin
  r:=&designation;                      --getting input for the designation
  dbms_output.put_line('hello');            --random output to check for errors
  select name1 into b from empl where designation=r;   --i want all the names from the table
  dbms_output.put_line('name'||b);                   --employee where designation is as entered
  dbms_output.put_line(' closed');                 --by user,should i loop this statement?
end;

Когда я ввожу обозначение как 'a' (которое уже введено в таблицу), я получаю сообщение об ошибке идентификатор 'a' не объявлен. Что это обозначает? Принимает ли оператор select по одной строке за раз? Итак, если я зациклю, я получу все строки? Или я должен использовать курсор? Почему SQL Developer не принимает %rowtype?

Я изменил свою программу на это:

set serveroutput on;
declare
  cursor cempl is select name1,designation from empl;
  b empl.name1%type;
  des empl.designation%type;
  r empl.designation%type;
begin
  r:='meow';
  dbms_output.put_line('hello');
  open cempl;
  if cempl%ISOPEN then
    loop
      fetch cempl into b,des;
      if des=r then
        dbms_output.put_line('name'||b);
      end if;
      exit when cempl%notfound;
    end loop;
    close cempl;
    dbms_output.put_line(' closed');
  end if;
end;

Всякий раз, когда я получаю ввод типа r:=&rи предполагаю, что я ввожу 'a', он говорит идентификатор 'a' должен быть объявлен, но это значение в таблице! Почему он должен быть объявлен, но если он указан в программе, как указано выше, он не выдает ошибку. Вместо этого он повторяет последнюю строку дважды!

7
задан ROMANIA_engineer 20 October 2017 в 20:41
поделиться