Ключевое слово создания процедуры не будет работать - PullRequest
0 голосов
/ 09 января 2012

если я напишу процедуру создания кода, подобного этому

declare
salary   number :=20000;
employee_id  number :=36325;
   procedure give_bonus(emp_id in number,bonus in number)  is
begin
dbms_output.put_line(emp_id);
dbms_output.put_line(bonus);
end;
 begin
 case
 when salary >=10000 and salary <=20000 then
 give_bonus(employee_id,1500);
 when  salary >= 20000 and salary <=40000 then
 give_bonus(employee_id,1000);
 when  salary>40000 then
 give_bonus(employee_id,500);
 else
 give_bonus(employee_id,0);
 end case ;
 end;

 it writes on output  
anonymous block completed

но если я напишу слово из главы процедуры создайте или замените процедуру give_bonus, он пишет ошибки, помогите пожалуйста, почему? ошибка это

Ошибка запуска в строке 1 в команде:

declare
salary   number :=20000;
employee_id  number :=36325;
  create or replace  procedure give_bonus(emp_id in number,bonus in number)  is
begin
dbms_output.put_line(emp_id);
dbms_output.put_line(bonus);
end;
 begin
 case
 when salary >=10000 and salary <=20000 then
 give_bonus(employee_id,1500);
 when  salary >= 20000 and salary <=40000 then
 give_bonus(employee_id,1000);
 when  salary>40000 then
 give_bonus(employee_id,500);
 else
 give_bonus(employee_id,0);
 end case ;
 end;




Error report:
ORA-06550: line 4, column 3:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

   begin function pragma procedure subtype type <an identifier>
   <a double-quoted delimited-identifier> current cursor delete
   exists prior
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

1 Ответ

2 голосов
/ 09 января 2012

CREATE OR REPLACE работает только для объектов верхнего уровня. Если вы объявляете процедуру внутри другого блока PL / SQL, по определению заменить нечего. Вы не создаете процедуру, которая будет существовать после завершения анонимного блока, поэтому заменять нечего. Вы просто объявляете процедуру, которая имеет ту же область действия, что и локальная переменная.

Вы можете создать отдельную процедуру

create or replace  procedure give_bonus(emp_id in number,bonus in number)  
is
begin
  dbms_output.put_line(emp_id);
  dbms_output.put_line(bonus);
end;

и затем ссылка на эту процедуру в вашем анонимном блоке PL / SQL

declare
  salary   number :=20000;
  employee_id  number :=36325;
begin
  case
  when salary >=10000 and salary <=20000 then
    give_bonus(employee_id,1500);
   when  salary >= 20000 and salary <=40000 then
     give_bonus(employee_id,1000);
   when  salary>40000 then
     give_bonus(employee_id,500);
   else
     give_bonus(employee_id,0);
  end case ;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...