Вот программа, которую я написал:
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' должен быть объявлен, но это значение в таблице! Почему он должен быть объявлен, но если он указан в программе, как указано выше, он не выдает ошибку. Вместо этого он повторяет последнюю строку дважды!