ПРОЦЕДУРА Предупреждение: выполнение завершено с предупреждением - PullRequest
0 голосов
/ 21 марта 2012

У меня проблема с этой процедурой. Ошибка, которую я продолжаю получать:

dbms_warning.set_warning_setting_string 'ENABLE:ALL', succeeded.
PROCEDURE promo_ship_sp compiled
Warning: execution completed with warning

Я попытался установить отчет об ошибках, чтобы получить немного больше информации, но больше ничего не появляется. SELECT * FROM BB_PROMOLIST; показывает результаты в 0 выбранных строках, так что это не может быть проблемой с идентификатором вставки, не так ли? Я отправил его, и он все еще не может успешно скомпилироваться.

set serveroutput on;
CALL DBMS_WARNING.set_warning_setting_string ('ENABLE:ALL', 'SESSION');
create or replace procedure promo_ship_sp  
  (
    tmp_id in date
  )
IS
v_dt date := tmp_id;
v_Promo_flag bb_promolist.promo_flag%type;
cursor cur_select is
    select idshopper, dtcreated
    from bb_basket 
  where dtcreated < v_dt
  order by idshopper;

BEGIN
 for rec_something in cur_select loop   
     insert into bb_promolist (idshopper, month, year, promo_flag, used) values
     (rec_something.idshopper, 'JAN', '2010', 1, 'N');
     dbms_output.put_line(rec_something.idshopper  || ' ' ||rec_something.dtcreated);
 end loop;
END;
/ 
show errors;
execute promo_ship_sp('15-FEB-07');

ХОРОШО Поймать переполнение стека, но это не было в моем реальном коде. Я отключил ограничения и затем скомпилировал без предупреждений, а затем снова включил ограничения и могу выполнять их столько раз, сколько пожелаю. Какая-то странная ошибка. Надеюсь, это кому-нибудь поможет.

set serveroutput on;
CALL DBMS_WARNING.set_warning_setting_string ('ENABLE:ALL', 'SESSION');
create or replace procedure promo_ship_sp  
  (
    tmp_id in date
  )
IS
v_dt date := tmp_id;
v_Promo_flag bb_promolist.promo_flag%type;
cursor cur_select is
    select idshopper, dtcreated
    from bb_basket 
  where dtcreated < v_dt
  order by idshopper;

BEGIN
 delete from bb_promolist;
 for rec_something in cur_select loop   
     insert into bb_promolist (idshopper, month, year, promo_flag, used) values
     (rec_something.idshopper, to_char(rec_something.dtcreated, 'MON'),  to_char(rec_something.dtcreated, 'YYYY'), 1, 'N');
 end loop;
END;
/ 
show errors;
execute promo_ship_sp('15-FEB-07');

1 Ответ

0 голосов
/ 21 марта 2012

Не ответ на ваш вопрос, но слишком долго для комментария.

Пожалуйста, замените курсор, курсор для цикла и insert ... values на:

  insert into bb_promolist (idshopper, month, year, promo_flag, used)
  select idshopper, to_char(dtcreated, 'MON'),  to_char(dtcreated, 'YYYY'), 1, 'N'
    from bb_basket 
  where dtcreated < v_dt;

Включайте предложение order by, только если у вас есть веская причина, например, для помещения данных с одинаковыми значениями в один и тот же блок:

  insert into bb_promolist (idshopper, month, year, promo_flag, used)
  select idshopper, to_char(dtcreated, 'MON'),  to_char(dtcreated, 'YYYY'), 1, 'N'
    from bb_basket 
  where dtcreated < v_dt
  order by idshopper;
...