Ошибка компиляции и ошибка выполнения хранимой процедуры в 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
если вы хотите получить несколько записей. Вы должны будете добавить несколько символов подстановки, хотя.