Ошибка компиляции и ошибка выполнения хранимой процедуры в Oracle 11g

Это моя хранимая процедура

create or replace procedure EMP_DB.std_stdsp
( stid  in out varchar(10),
 name   in out varchar(100)
)
is 
begin
select *from students s
where S.STDID in(stid)
and S.STDNME in (name);
end EMP_DB.std_stdsp;
/

ошибка компиляции

Предупреждение: скомпилировано, но с ошибками компиляции

Когда я выполняю хранимую процедуру, я получаю ошибку

EXEC EMP_DB.std_stdsp('1','Farhat');

ошибка

BEGIN EMP_DB.std_stdsp('1','Farhat'); END;
Error at line 1
ORA-06550: line 1, column 14:
PLS-00905: object EMP_DB.STD_STDSP is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Любой, помогите мне. Спасибо заранее

1 ответ

Похоже, вы намереваетесь получить несколько записей из списка избранных. Для обработки нескольких записей вам понадобится цикл. Следующее должно скомпилироваться (извините, не проверял)

create or replace procedure EMP_DB.std_stdsp ( 
     stid  in out varchar(10),
     name   in out varchar(100)) is 
begin
  for rec in (select *
                from students s
                where S.STDID in(stid)
                  and S.STDNME in (name)) loop
    dbms_output.put_line ('student record');
    -- replace the dbms_output and this comment with some meaningful code
    -- any code inside the loop will execute once for each student record 
    -- returned from the select statement
  end loop;
end EMP_DB.std_stdsp;
/

Вторая ошибка только потому, что ваша процедура не скомпилирована.

Ваше намерение передать что-то вроде '1,3,5' в к stid параметр для получения записей 1, 3 и 5. Если это так, он не будет работать, как задумано. В займет весь '1,3,5' как одно значение. Чтобы сопоставить запись в таблице, stdid столбец должен быть '1,2,3' именно так. Вы можете переключить его, чтобы использовать like вместо in если вы хотите получить несколько записей. Вы должны будете добавить несколько символов подстановки, хотя.

Другие вопросы по тегам