create or replace procedure del_msg_sixm as
del_time varchar(10);
begin
select to_char(add_months(sysdate,-6),'YYYYMM') into del_time from dual;
delete from msg_p2p_rsp 
where substr((to_char(fsendtime,'YYYYMM')),1,6) < del_time;
end del_msg_sixm;小弟初写oracle的存储过程,请问上面的语句这样写有没有问题?另外想问一下,一般如何执行存储过程的?我在PL/SQL developer里面右键点击该存储过程,然后test它,放了很久都一直在执行状态,是怎么回事?请各位帮忙啊

解决方案 »

  1.   

    加上commit,放了很久都一直在执行状态,是怎么回事?
    应该是你的过程死在那里,死循环了吧。
      

  2.   

    如何执行存储过程:
    pl/sql: command Window下
    begin
    procedure_name;
    end;
    這樣就可以了。
      

  3.   

    修改了一下 sendtime字段为date类型
    create or replace procedure del_msg_sixm as
    del_time date;
    begin
    select sysdate - 300 into del_time from dual;
    delete from msg_p2p_rsp where sendtime < del_time;
    commit;
    end del_msg_sixm;
    建立存储过程成功,但是在command窗口下面exec del_msg_sixm;该存储过程一直在executing状态,但是用命令delete from del_msg_sixm where sendtime < sysdate - 300 
    10秒就可以搞掂了不知道怎么回事?
      

  4.   

    create or replace procedure del_msg_sixm as
    del_time date;
    begin
    select sysdate - 300 into del_time from dual;
    delete from msg_p2p_rsp where sendtime < del_time;
    commit;
    end del_msg_sixm;
    /這樣才可以其實都沒有執行,要加上'/'符,表示執行...
      

  5.   

    但是在command窗口下面exec del_msg_sixm,
    執行的語法是什么樣子?
    exec del_msg_sixm
    這樣後,一直顯示sql>嗎?
    "exec del_msg_sixm;
    /"