【问题标题】:PROCEDURE Warning: execution completed with warningPROCEDURE 警告:执行完成但有警告
【发布时间】:2012-03-21 00:48:35
【问题描述】:

我遇到了这个过程的问题。我一直收到的错误是:

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

我已尝试设置错误报告,以便获得更多信息,但没有其他任何显示。 SELECT * FROM BB_PROMOLIST; 显示提取的结果为 0 行,所以它不能是插入 ID 问题,可以吗?我已经提交了,它仍然无法成功编译。

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');

GOOD Catch 堆栈溢出,但在我的实际代码中不是这样。我禁用了约束,然后在没有警告的情况下编译,然后再次启用约束,可以随意执行多次。有点奇怪的错误。希望这可以帮助某人。

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');

【问题讨论】:

  • SO 上的语法高亮显示了问题所在。您在'Jan 周围缺少'。不需要commit 一个包。
  • 如果在启用约束的情况下再次编译会出现错误?
  • 你用什么客户端来编译程序?
  • 没有表定义很难知道,但警告可能是:PLW-07202: bind type would result in conversion away from column typedocs.oracle.com/cd/B19306_01/server.102/b14219/…
  • 而且v_dt date := tmp_id; 甚至不应该编译,没有声明类型。 (除非自 10g 以来情况发生了变化。)

标签: sql oracle stored-procedures oracle10g


【解决方案1】:

不是您问题的答案,但评论太长了。

请将光标、for循环光标和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;

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 2017-04-16
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多