Как использовать оператор case в предложении select into при создании хранимой процедуры - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь создать хранимую процедуру, используя приведенный ниже код. Но я получаю ошибку компиляции.

create or replace procedure sp(enm number, com_stat out varhar2)
as
begin
select
(case
when (sal > 2000 and comm is not null) then ('High Sal')
when (sal < 2000 and comm is null) then ('No Comm')
end) into com_stat 
from emp1 ;
dbms_output.put_line(com_stat);
end;

Кто-нибудь может мне помочь в этом вопросе.

Спасибо, Su bash

1 Ответ

0 голосов
/ 30 мая 2020

Тип данных varchar2, а не varhar2.

Кроме того, вы можете опустить эти скобки.

SQL> create or replace procedure sp(enm number, com_stat out varchar2)
  2  as
  3  begin
  4    select case when sal > 2000 and comm is not null then 'High Sal'
  5                when sal < 2000 and comm is null     then 'No Comm'
  6           end
  7      into com_stat
  8      from emp1 ;
  9  end;
 10  /

Procedure created.

SQL>

Однако высока вероятность того, что процедура вызовет too_man_rows поскольку нет предложения WHERE, которое ограничивало бы select возвращать одно значение. Вероятно, это

where emp1.empno = enm

или что-то в этом роде, отсутствующее после строки # 8.

...