2012-03-21 64 views
0

我遇到了此过程的问题。我不断收到的错误是:程序警告:执行完成并发出警告

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

在堆栈溢出好对象,但是这不是我的实际代码。我禁用了约束,然后在没有警告的情况下进行编译,然后再次启用约束,并可以根据需要多次执行它。有点奇怪。希望这可以帮助某人。

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

SO上的语法突出显示了您的问题。你在'Jan'附近丢失了''''。没有必要“提交”一个包。 – Ben 2012-03-21 01:10:00

+0

如果在启用约束的情况下重新编译,会发生错误? – 2012-03-21 12:42:01

+0

您使用什么客户端来编译过程? – 2012-03-21 15:48:41

回答

0

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

请更换光标,光标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; 

by子句包含ORDER只有当你有一个很好的理由,比如将数据与相同的值在同一个街区:

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;