上面存储过程调试是通过了的,
本来都还是可以的
后来我用SQL SERVER的DTS倒一个system表到ORACLE下面后就不行了
不知道是什么原因能恢复吗
我觉得应该存储过程和程序都不应该有问题的
是不是我上面的操作破坏了ORACLE的默认的SYSTEM表?

解决方案 »

  1.   

    declare
      jxlb  char(1) :='N';
    begin
     getnewjb1(to_date('20020401','yyyymmdd'),to_date('20030401','yyyymmdd'),jxlb);
    end;我直接用这个调用都是说没有声明getnewjb1
    晕了
      

  2.   

    declare
      jxlb  char(1) :='N';
      v_rc pkg_pub.GetNewJb1;
    begin
     getnewjb1(to_date('20020401','yyyymmdd'),to_date('20030401','yyyymmdd'),jxlb,v_rc);
    end;
    /估计在delphi在定义一个变量声明游标参数.
      

  3.   

    感谢各位的关注
    问题已经解决
    我是重新建立了整个数据库来解决的
    我已经可以肯定的知道是那个SYSTEM表导入后引发的这个错误的
    但是有谁可以来给我解释一下么?
      

  4.   

    create or replace PROCEDURE GetNewJb1(startrq date,endrq date,jxlb in out varchar2,p_rc OUT pkg_pub.GetNewJb1)
       IS
          sqlstr   VARCHAR2 (50);
          jxlbstr char(4);
       BEGIN
             
                if jxlb is null then
               jxlb := '';
           end if ; 
              delete from newjb1;
              insert into NewJb1(rq,jxlb,lbmc,trans_head,col01,col02,col03,
                                                         col04,col05,col06,col07,col08,col09,col10,
                                                         col11,col12,col13,col14,col15,col16,col17,
                                                         col18,col19,col20_H,col20,col21_H,col21,
                                                         col22_H,col22,col23_H,col23,col24_H,col24,
                                                         col25_H,col25)
                      select 
                              tjrq,jxlb,lbmc,trans_head,sum(col01),sum(col02),sum(col03),
                              sum(col04),sum(col05),sum(col06),sum(col07),sum(col08),sum(col09),sum(col10),
                              sum(col11),sum(col12),sum(col13),sum(col14),sum(col15),sum(col16),sum(col17),
                              sum(col18),sum(col19),sum(col20_H),sum(col20),sum(col21_H),sum(col21),
                              sum(col22_H),sum(col22),sum(col23_H),sum(col23),sum(col24_H),sum(col24),
                              sum(col25_H),sum(col25) 
                  from NewJb1Rj  
                 where  jxlb=jxlb
                                 and tjrq>=startrq 
                                 and tjrq<=endrq
                                 group by tjrq,jxlb,lbmc,trans_head;          update NewJb1 set col19=col20+col21+col22+col23+col24+col25; 
              update NewJb1 set col07=col08+col09+col10+col11+col12+col13+col14+col15;
              update NewJb1 set col06=col07+col17+col18+col19 ;
              update NewJb1 set col01=col02+col03+col05+col06-col04 ;
              update NewJb1 set col19_h=decode(col06,null,0,0,0,round((col19/col06)*100,1));
              update NewJb1 set col20_h=decode(col06,null,0,0,0,round((col20/col06)*100,1));
              update NewJb1 set col21_h=decode(col06,null,0,0,0,round((col21/col06)*100,1));
              update NewJb1 set col22_h=decode(col06,null,0,0,0,round((col22/col06)*100,1));
              update NewJb1 set col23_h=decode(col06,null,0,0,0,round((col23/col06)*100,1));
              update NewJb1 set col24_h=decode(col06,null,0,0,0,round((col24/col06)*100,1));
              update NewJb1 set col25_h=decode(col06,null,0,0,0,round((col25/col06)*100,1));
          jxlbstr:=jxlb;
          sqlstr:='select * from newjb1 where jxlb='||jxlbstr;
          OPEN p_rc FOR sqlstr using jxlbstr;
           为什么这里不支持动态的啊??
    END GetNewJb1;
      

  5.   

    OPEN p_rc FOR sqlstr using jxlbstr;只要 OPEN p_rc FOR sqlstr; 这样就可以了。
      

  6.   

    还是不行啊
    加上where后面的条件就不行了啊
      

  7.   

    jxlb是字符型的吧,那么改为
    sqlstr:='select * from newjb1 where jxlb='''||jxlbstr||'''';
      

  8.   

    Lastdrop(空杯) 
    多谢但是按照你的提示还是不行编译都不能通过了啊
      

  9.   

    ---SQL*Plus: Release 3.3.2.0.2 测试通过
    create table test1(
      name    varchar2(20),
      address varchar2(100)
    );declare
      type t_CursorRef is REF CURSOR;
      v_CorsorVar t_CursorRef;
      v_sql varchar2(100);
      v_name test1.name%type;
    begin
      v_name := 'test';
      v_sql := 'select * from test1 where name='''||v_name||'''';
      open v_CorsorVar for v_sql ;
      close v_CorsorVar;
    end;
    /
      

  10.   

    "编译都不能通过了"?不会吧,报什么错?你用show err命令瞧瞧。同时我又发现你一个错误,
                  from NewJb1Rj  
                 where  jxlb=jxlb  ----!!字段名和输入参数名称相同,这样是不行的,Oracle会把右边的jxlb当作字段名而非输入参数处理!所以把输入参数jxlb改为in_jxlb之类的!