pl/sql调用存储过程的格式
declare
start_date date:=sysdate-1; --  开始时间
end_date   date:=sysdate;   --  结束时间
begin
CRMSPL.TEST(start_date,end_date);
end;
/你这个存储过程代码不完善哦若查出多于一条的记录会报错的。

解决方案 »

  1.   

    是into到一个变量,不是临时表
      

  2.   

    njhart2003() : 为什么查出多于一条的记录会报错呢?
      

  3.   

    qiaozhiwei(乔):为什么要into到一个变量里啊,怎么和SQL SERVER不一样呢
      

  4.   

    楼上的各位,谢谢你们的回答,可是不行啊,还是有错误,
    General SQL error.
    ORA-00900:无效SQL语句
    晕死了要
      

  5.   

    还有SELECT的时候为什么INTO到一个临时表里,实在是不明白,请各位高手给我讲解一下,先谢谢了!这个问题我来回答一下你select into的不是一个临时表,而是一个变量,这样做的好处在由于遇到循环时按行插入数据会非常的方便,比如,这是我写的程序片断:--取营帐地市信息
       CURSOR cur_bus_city
       IS
          SELECT city_code
            FROM dim_admin.bs_city_id_t
           WHERE city_level = 3;BEGIN
        OPEN cur_bus_city;
        LOOP 
    FETCH cur_bus_city INTO v_city_code;
    EXIT WHEN cur_bus_city%NOTFOUND;        if vv_pay_type = 5 
    then   
      begin
     select nvl(month_fee,0) 
     into vn_month_fee0
     from RPT_193_group_DETAIL_t 
     where pay_type = vv_pay_type 
     AND month_id = v_fee_month 
     and service_group_id = vv_group_id
     and city_code =v_city_code
     and service_kind_id = 7;
     exception when others then
      vn_month_fee0 := 0;
    end;
    begin 
     select nvl(sum(month_fee),0)
    into vn_year_fee0
    from RPT_193_group_DETAIL_t
    where substr(month_id,0,4) = v_fee_year 
    and pay_type = vv_pay_type 
    and service_group_id = vv_group_id
    and city_code=v_city_code
    and service_kind_id = 7
    group by city_code,service_group_id;
    exception when others then
      vn_year_fee0 := 0;

    end;
    end if;            INSERT INTO  RPT_193_group_DETAIL_t
    (
    MONTH_ID          ,
       CITY_CODE         ,
       SERVICE_GROUP_ID  ,
       SERVICE_KIND_ID   ,
       MONTH_FEE         ,
       PAY_TYPE          ,
       YEAR_FEE0         ,
       MONTH_FEE1        ,
       YEAR_FEE1         
    )
    VALUES (
    v_fee_month,
    v_city_code,
    vv_group_id,
    7,
    vn_month_fee0,
    7,
    nvl(vn_year_fee0,0),
    nvl(vn_month_fee1,0),
    nvl(vn_year_fee1,0)
    );

                    COMMIT;              end loop;
                  close cur_bus_city;
    因为我是做电信项目的,所以我的程序需要按地市循环(这段程序只是我程序的一小部分),有了 SELECT INTO 后边的变量,就使我省去了写 N 多 代码的麻烦,你先看看,有什么不懂的我再给你解释 ^_^
      

  6.   

    如果用的是PLSQL Developer
    则是在命令窗口中执行exec test(sysdate,sysdate);
    不能在SQL窗口中执行.
      

  7.   

    这个网站有介绍的电子书,好好看看
    http://www.netyi.net/in.asp?id=hjf1010
      

  8.   

    fangyu82528(大俣治水) :谢谢你,我实在是看不明白,用了INTO后面的变量后怎么省略了N多代码量啊,请详细解释一下好吗
    yangyu9000(JIMMY(术士)) :我是在客户端的SQL里面调用的存储过程,你所说的
    PLSQL Developer在哪里有啊
      

  9.   

    PLSQL Developer在哪里有啊
    可以在网上下载的.
      

  10.   

    fangyu82528(大俣治水) :谢谢你,在存储过程里要是想显示一个列表,是不是得用游标啊,然后用循环一条条显示出来啊,这样速度是不是非常慢啊,我刚接触ORACLE,以后向你多多学习!