create or replace procedure prc_succeed_tj(v_data_date  date,
                                           ac_cljg      out varchar2,
                                           ac_sbyy      out varchar2) is  e_except exception; --自定义EXCEPTION
  v_start_dt    date;
  vi_code       number(10); --4
  vc_desc       varchar2(200);
  v_count       number(10);
  vi_i          number(2);
  vc_table_name varchar2(32);
  vc_year       varchar2(4);
  vc_month      varchar2(2);
  VC_SQLSTR     varchar2(4000);
  v_date        varchar2(8);
BEGIN
  ac_cljg := '0'; --处理结果
  ac_sbyy := ''; --失败原因insert into  t_succeed_tj  
  select orgno,v_data_date,
         count(distinct(meterid)) ycj,0,0,0,1,2 
from INTERMEDIATE_SUCCESS_REPORT xx 
where xx.datadate = v_data_date 
   and xx.tmnltypecode='02'   
  group by orgno ;commit ;
  
exception
  when others then
    vi_code := sqlcode;
    vc_desc := substr(sqlerrm, 1, 500);    ac_cljg := '-1';
    ac_sbyy := vc_desc;    insert into edc_prc_log
      (run_date, flag, sqlstring, finish_date, prc_name, souce_table)
    values
      (v_start_dt,
       0,
       '统计失败 - ' || vi_code || vc_desc,
       SYSDATE,
       'edc.prc_succeed_tj',
       'edc.t_succeed_tj');    commit;
end;
上面这个过程中的
v_data_date  date,
ac_cljg      out varchar2,
ac_sbyy      out varchar2

e_except exception; --自定义EXCEPTION
  v_start_dt    date;
  vi_code       number(10); --4
  vc_desc       varchar2(200);
  v_count       number(10);
  vi_i          number(2);
  vc_table_name varchar2(32);
  vc_year       varchar2(4);
  vc_month      varchar2(2);
  VC_SQLSTR     varchar2(4000);
  v_date        varchar2(8);是什么意思?
是什么时候使用?
谢谢!

解决方案 »

  1.   


    --这3个是存储过程的参数,输入参数是在调用该存储过程的时候,要传递给存储过程的;
    --输出参数是存储过程想要返回给调用程序结果时使用的
    v_data_date date,--输入参数
    ac_cljg out varchar2,--输出参数
    ac_sbyy out varchar2--输出参数--下面这一堆是存储过程中定义的变量,就像在一个类中定义的变量一样,可以在该存储过程中使用。
    e_except exception; --自定义EXCEPTION
      v_start_dt date;
      vi_code number(10); --4
      vc_desc varchar2(200);
      v_count number(10);
      vi_i number(2);
      vc_table_name varchar2(32);
      vc_year varchar2(4);
      vc_month varchar2(2);
      VC_SQLSTR varchar2(4000);
      v_date varchar2(8);是什么意思?
    是什么时候使用?
    谢谢!
      

  2.   

    e_except exception; --用户自定义EXCEPTION
    当某个特定条件成立时 raise :e_exceptDECLARE
     e_except EXCEPTION;
    BEGIN
     if... then
      RAISE e_except;
     end if;
    EXCEPTION
    when e_except then
      dbms_output.put_line('i raised a user-defined exception ''e_except''');
    END;
    /
      

  3.   

    e_except exception 用户自定义异常例如:
    declare 
    e_except exception;
    v_name varchar(2):=null;
    begin
    if v_name is null then
    raise e_except;
    end if;
    exception when e_except then
    dbms_out.put_line('the value has not been given for the variable')
    end;