大家看一下,这个过程报的错误怎么解决啊!过程:CREATE OR REPLACE WP_GRTJ_JWT
--个人统计存储过程
( M_RESULT OUT VARCHAR2,  
  M_MSG OUT VARCHAR2,  
  M_AREA_CODE           IN      VARCHAR2,  
  M_POLICE_NAME         IN      VARCHAR2,  
  M_START_DATE          IN      VARCHAR2,  
  M_END_DATE            IN      VARCHAR2,  
  M_TYPE                IN      VARCHAR2,   
  M_ZCLWZCS              OUT     VARCHAR2,   
  M_BCLWZCS             OUT     VARCHAR2,   
  M_WCLWZCS             OUT     VARCHAR2,   
  M_ZWZKFS              OUT     VARCHAR2,   
  M_BWZKFS              OUT     VARCHAR2,   
  M_WWZKFS              OUT     VARCHAR2,   
  M_ZFKJES              OUT     VARCHAR2,   
  M_ZDKZJS              OUT     VARCHAR2,   
  M_ZZKCS               OUT     VARCHAR2,  
  M_ZZLCS               OUT     VARCHAR2,   
  M_ZSJCS               OUT     VARCHAR2    
)
IS
  V_ZCLWZCS              OUT     VARCHAR2,   
  V_BCLWZCS             OUT     VARCHAR2,   
  V_WCLWZCS             OUT     VARCHAR2,   
  V_ZWZKFS              OUT     VARCHAR2,   
  V_BWZKFS              OUT     VARCHAR2,   
  V_WWZKFS              OUT     VARCHAR2,   
  V_ZFKJES              OUT     VARCHAR2,   
  V_ZDKZJS              OUT     VARCHAR2,   
  V_ZZKCS               OUT     VARCHAR2,   
  V_ZZLCS               OUT     VARCHAR2,   
  V_ZSJCS               OUT     VARCHAR2,   
TMP_V_TIME VARCHAR2(20);  BEGIN
     M_MSG:='1';
     IF M_TYPE='1' THEN
        TMP_V_TIME:=' V.PUNISH_DATE';
     END IF;
     IF M_TYPE='2' THEN
       TMP_V_TIME:=' V.INPUT_DATE';
     END IF;
  select count(distinct(V.Violation_ID)) V_ZCLWZCS,sum(V.score) V_ZWZKFS,sum(V.fine) V_ZFKJES  
      from w_violation v  where v.is_del='0' and area_code=M_AREA_CODE
      and police_name=M_POLICE_NAME  and TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
      and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;
  M_ZCLWZCS:=NVL(V_ZCLWZCS,0);
  M_ZWZKFS:=NVL(V_ZWZKFS,0);
  M_ZFKJES:=NVL(V_ZFKJES,0);
  
  M_MSG:='2'
  select count(distinct(violation_id)) V_BCLWZCS,sum(V.Score) V_BWZKFS
      from w_violation v where v.is_del='0' and area_code=M_AREA_CODE  
      and  police_name=M_POLICE_NAME and substr(V.grant_unit,1,4)=SUBSTR(M_AREA_CODE,1,4)
      and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
      and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;
  M_BCLWZCS:=NVL(V_BCLWZCS,0);
  M_BWZKFS:=NVL(V_BWZKFS,0);
  
  M_MSG:='3'
  select count(distinct(violation_id)) V_WCLWZCS,sum(V.Score) V_WWZKFS 
      from w_violation v where v.is_del='0'  and area_code=M_AREA_CODE 
      and  police_name=M_POLICE_NAME  and substr(grant_unit,1,4)<>SUBSTR(M_AREA_CODE,1,4)
      and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
      and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;    
  M_WCLWZCS:=NVL(V_WCLWZCS,0);
  M_WWZKFS:=NVL(V_WWZKFS,0);
  
  M_MSG:='4'
  select count(distinct(violation_id)) V_ZDKZJS  from wv_punish vp 
      where   Area_code=M_AREA_CODE  and police_name=M_POLICE_NAME
              and hang_months>0   
              and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
              and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1; 
  M_ZDKZJS:=NVL(V_ZDKZJS,0)
  
  --暂扣次数
  M_MSG:='5'
  select count(distinct(f.violation_id)) V_ZZKCS  from  w_violation v,w_force f 
     where   v.violation_Id=f.violation_id  
            and v.Area_Code=M_AREA_CODE 
            and v.police_name=M_POLICE_NAME  
            and f.keap_Reason like '1%'
            and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
            and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;   M_ZZKCS:=(V_ZZKCS,0);  
   select  count(distinct(f.violation_id)) V_ZZLCS  from w_violation v,w_force f
     where  v.violation_id=f.Violation_id  
            and v.Area_code=M_AREA_CODE 
            and v.police_name=M_POLICE_NAME
            and f.Capture_Reason like '2%'
            and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
            and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;   
  M_ZZLCS:=(V_ZZLCS,0);
  
  select count(distinct(f.violation_Id)) V_ZSJCS   from w_violation v,w_Force f  
     where  v.Violation_id=f.Violation_id
            and  v.Area_code=M_AREA_CODE
            and  police_name=M_POLICE_NAME
            and  f.Resort_reason like '3%'
            and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
            and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;
  M_ZSJCS:=NVL(V_ZSJCS,0);  COMMIT;
  M_RESULT:='1';
  M_MSG:='统计已完成!';
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    M_RESULT:='-1';
    M_MSG:=M_MSG||'统计过程错误! 错误信息:'||SUBSTR(SQLERRM,1,300);
END;
报错:输入被截为9个字符
  select count(distinct(violation_id)) V_BCLWZCS,sum(V.Score) V_BWZ
  *
ERROR 位于第 18 行:
ORA-06550: 第 18 行, 第 3 列:
PLS-00103: 出现符号 "SELECT"在需要下列之一时:
.(*@%&=-+;</>atinmodnot
rem<an exponent (**)><> or != or ~=>=<=<>andorlikebetween
is nullis not||is dangling
符号 ";" 被替换为 "SELECT" 后继续。
ORA-06550: 第 27 行, 第 3 列:
PLS-00103: 出现符号 "SELECT"在需要下列之一时:
.(*@%&=-+;</>atinmodnot
rem<an exponent (**)><> or != or ~=>=<=<>andorlikebetween
is nullis not||is dangling
符号 ";" 被替换为 "SELECT" 后继续。
ORA-06550: 第 36 行, 第 3 列:
PLS-00103: 出现符号 "SELECT"在需要下列之一时:
.(*@%&=-+;</>atinmodnot
rem<an exponent (**)><> or != or ~=>=<=<>andorlikebetween
is nullis not||is dangling
符号 ";" 被替换为 "SELECT" 后继续。
ORA-06550: 第 44 行, 第 3 列:
PLS-00103: 出现符号 "M_MSG"在需要下列之一时:
.(*%&=-+;</>atinmodnotrem
<an exponent (**)><> or != or ~=>=<=<>andorlikebetween
is nullis not||is dangling

解决方案 »

  1.   

    不能直接在過程里面寫select col1,col2,... from ...語句,而是
    select ... into ...語句。
      

  2.   

    在过程中select后面要加into,将取出的数据存入变量中。
      

  3.   

    由于疏忽上面过程有几处没加分号,我把分号加上,并把SELECT 后面加上INTO 将取出的数据存到变量中,把变量类型改为NUMBER型,还是有错。
      select count(distinct(V.Violation_ID)) INTO V_ZCLWZCS,sum(V.score) INTO V_ZWZKFS,sum(V.fine)  
                                                                         *
    ERROR 位于第 9 行:
    ORA-06550: 第 9 行, 第 70 列:
    PLS-00103: 出现符号 "INTO"在需要下列之一时:
    .(,%from
    符号 "(在 "INTO" 继续之前已插入。
    ORA-06550: 第 9 行, 第 97 列:
    PLS-00103: 出现符号 "INTO"在需要下列之一时:
    ),*&|=-+</>atinmodnotrem=>
    ..<an exponent (**)><> or != or ~=>=<=<>andorlikebetween
    is nullis not||is dangling
      

  4.   

    我把定义的临时变量类型,由于拷贝的,有OUT类型,我把他也去掉了。
      

  5.   

    语法错误呀!应该这样写
     select count(distinct(V.Violation_ID)) ,sum(V.score),sum(V.fine)
     INTO V_ZCLWZCS,V_ZWZKFS ,V.ff from  table_name where .....
      

  6.   

    我按上面的已经都改过来了,但还有一个错误,不只怎么改正。输入被截为9个字符
        M_MSG:='警员统计过程错误! 错误信息:'||SUBSTRB(SQLERRM,1,300);
                                                                        
    ERROR 位于第 81 行:
    ORA-06550: 第 81 行, 第 68 列:
    PLS-00103: 出现符号 ";"在需要下列之一时:
    .(*%&=-+;</>atinmodnotrem
    <an exponent (**)><> or != or ~=>=<=<>andorlikebetween
    is nullis not||is dangling
    符号 ";在 ";" 继续之前已插入。
      

  7.   

    这句错了,注意分号的中英写法(全角/半角)M_MSG:=M_MSG||'统计过程错误! 错误信息:'||SUBSTR(SQLERRM,1,300);
    这句后面的分号有问题,是中文分号,正确的应该是";"
      

  8.   

    colinGan:
         你好!确实是中文分号的问题,我已经改过来了。
         但提示一些错误,不太清楚什么原因了,我已经声明了啊。
    ERROR 位于第 2 行:
    ORA-06550: 第 2 行, 第 6 列:
    PLS-00201: 必须说明标识符 'M_MSG'
    ORA-06550: 第 2 行, 第 6 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 3 行, 第 9 列:
    PLS-00201: 必须说明标识符 'M_TYPE'
    ORA-06550: 第 3 行, 第 6 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 6 行, 第 9 列:
    PLS-00201: 必须说明标识符 'M_TYPE'
    ORA-06550: 第 6 行, 第 6 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 10 行, 第 60 列:
    PLS-00201: 必须说明标识符 'M_AREA_CODE'
    ORA-06550: 第 9 行, 第 3 列:
    PL/SQL: SQL Statement ignored
    ORA-06550: 第 13 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_ZCLWZCS'
    ORA-06550: 第 13 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 14 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_ZWZKFS'
    ORA-06550: 第 14 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 15 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_ZFKJES'
    ORA-06550: 第 15 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 16 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_MSG'
    ORA-06550: 第 16 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 18 行, 第 59 列:
      

  9.   

    这些定义错了,
    正确的应该这样:
      V_ZCLWZCS             VARCHAR2(20);
      V_BCLWZCS             VARCHAR2(20);
      V_WCLWZCS             VARCHAR2(20);
      V_ZWZKFS              VARCHAR2(20);
      V_BWZKFS              VARCHAR2(20);
      V_WWZKFS              VARCHAR2(20);
      V_ZFKJES              VARCHAR2(20);
      V_ZDKZJS              VARCHAR2(20);
      V_ZZKCS               VARCHAR2(20);
      V_ZZLCS               VARCHAR2(20);
      V_ZSJCS               VARCHAR2(20);
      TMP_V_TIME       VARCHAR2(20);  对于存储过程注意方面:1、参数必须加上标识IN或者OUT,并且不能指定大小
    2、变量不能加IN/OUT,并且应该指定大小,以上的属于变量
      

  10.   

    看看这个语法:Create or Replace Procedure test ( 参数 )
    Is 
      变量定义(包括游标的定义,数组、集合等的定义)
    Begin
      程序主体
    End;
      

  11.   

    CREATE OR REPLACE WP_GRTJ_JWT
    --个人统计存储过程
    ( M_RESULT OUT VARCHAR2,  --过程执行结果,1成功,-1过程内部错
      M_MSG OUT VARCHAR2,  --过程执行消息
      M_AREA_CODE           IN      VARCHAR2,  --统计单位代码,六位
      M_POLICE_NAME         IN      VARCHAR2,  --统计姓名
      M_START_DATE          IN      VARCHAR2,  --格式:YYYY.MM.DD
      M_END_DATE            IN      VARCHAR2,  --格式:YYYY.MM.DD
      M_TYPE                IN      VARCHAR2,   
      M_ZCLWZCS              OUT     NUMBER,   
      M_BCLWZCS             OUT     NUMBER,   
      M_WCLWZCS             OUT     NUMBER,   
      M_ZWZKFS              OUT     NUMBER,   
      M_BWZKFS              OUT     NUMBER,   
      M_WWZKFS              OUT     NUMBER,   
      M_ZFKJES              OUT     NUMBER,   
      M_ZDKZJS              OUT     NUMBER,   
      M_ZZKCS               OUT     NUMBER,  
      M_ZZLCS               OUT     NUMBER,   
      M_ZSJCS               OUT     NUMBER    
    )
    IS
      V_ZCLWZCS                  NUMBER(10,0),   
      V_BCLWZCS                  NUMBER(10,0),   
      V_WCLWZCS                  NUMBER(10,0),   
      V_ZWZKFS                   NUMBER(10,0),   
      V_BWZKFS                   NUMBER(10,0),   
      V_WWZKFS                   NUMBER(10,0),   
      V_ZFKJES                   NUMBER(10,0),   
      V_ZDKZJS                   NUMBER(5,0),  
      V_ZZKCS                    NUMBER(5,0),   
      V_ZZLCS                    NUMBER(5,0),   
      V_ZSJCS                    NUMBER(5,0),   
    TMP_V_TIME      VARCHAR2(20);  BEGIN
         M_MSG:='1';
         IF M_TYPE='1' THEN
            TMP_V_TIME:=' V.PUNISH_DATE';
         END IF;
         IF M_TYPE='2' THEN
           TMP_V_TIME:=' V.INPUT_DATE';
         END IF;
      select count(distinct(V.Violation_ID)) ,sum(V.score) ,sum(V.fine) INTO V_ZCLWZCS , V_ZWZKFS, V_ZFKJES  
          from w_violation v  where v.is_del='0' and area_code=M_AREA_CODE
          and police_name=M_POLICE_NAME  and TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
          and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;
      M_ZCLWZCS:=NVL(V_ZCLWZCS,0);
      M_ZWZKFS:=NVL(V_ZWZKFS,0);
      M_ZFKJES:=NVL(V_ZFKJES,0);
      
      M_MSG:='2';
      select count(distinct(violation_id)) ,sum(V.Score) INTO V_BCLWZCS, V_BWZKFS
          from w_violation v where v.is_del='0' and area_code=M_AREA_CODE  
          and  police_name=M_POLICE_NAME and substr(V.grant_unit,1,4)=SUBSTR(M_AREA_CODE,1,4)
          and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
          and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;
      M_BCLWZCS:=NVL(V_BCLWZCS,0);
      M_BWZKFS:=NVL(V_BWZKFS,0);
      
      M_MSG:='3';
      select count(distinct(violation_id)) ,sum(V.Score) INTO V_WCLWZCS, V_WWZKFS 
          from w_violation v where v.is_del='0'  and area_code=M_AREA_CODE 
          and  police_name=M_POLICE_NAME  and substr(grant_unit,1,4)<>SUBSTR(M_AREA_CODE,1,4)
          and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
          and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;    
      M_WCLWZCS:=NVL(V_WCLWZCS,0);
      M_WWZKFS:=NVL(V_WWZKFS,0);
      
      M_MSG:='4';
      select count(distinct(violation_id)) INTO V_ZDKZJS  from wv_punish vp 
          where   Area_code=M_AREA_CODE  and police_name=M_POLICE_NAME
                  and hang_months>0   
                  and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
                  and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1; 
      M_ZDKZJS:=NVL(V_ZDKZJS,0);
      
      --暂扣次数
      M_MSG:='5';
      select count(distinct(f.violation_id)) INTO V_ZZKCS  from  w_violation v,w_force f 
         where   v.violation_Id=f.violation_id  
                and v.Area_Code=M_AREA_CODE 
                and v.police_name=M_POLICE_NAME  
                and f.keap_Reason like '1%'
                and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
                and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;   M_ZZKCS:=(V_ZZKCS,0);  
       select  count(distinct(f.violation_id)) INTO V_ZZLCS  from w_violation v,w_force f
         where  v.violation_id=f.Violation_id  
                and v.Area_code=M_AREA_CODE 
                and v.police_name=M_POLICE_NAME
                and f.Capture_Reason like '2%'
                and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
                and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;   
      M_ZZLCS:=(V_ZZLCS,0);
      
      select count(distinct(f.violation_Id)) INTO  V_ZSJCS   from w_violation v,w_Force f  
         where  v.Violation_id=f.Violation_id
                and  v.Area_code=M_AREA_CODE
                and  police_name=M_POLICE_NAME
                and  f.Resort_reason like '3%'
                and   TEMP_DATE>=TO_DATE(M_START_DATE,'YYYY.MM.DD')
                and TMP_V_TIME<=TO_DATE(M_END_DATE,'YYYY.MM.DD')+1;
      M_ZSJCS:=NVL(V_ZSJCS,0);  COMMIT;
      M_RESULT:='1';
      M_MSG:='统计已完成!';
    EXCEPTION
      WHEN OTHERS THEN
        ROLLBACK;
        M_RESULT:='-1';
        M_MSG:='警员统计过程错误! 错误信息:'||SUBSTRB(SQLERRM,1,300);
    END;
    /        错误提示:
    CREATE OR REPLACE WP_GRTJ_JWT
                      *
    ERROR 位于第 1 行:
    ORA-00922: 缺少或无效选项
    输入被截为9个字符
         M_MSG:='1';
         *
    ERROR 位于第 2 行:
    ORA-06550: 第 2 行, 第 6 列:
    PLS-00201: 必须说明标识符 'M_MSG'
    ORA-06550: 第 2 行, 第 6 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 3 行, 第 9 列:
    PLS-00201: 必须说明标识符 'M_TYPE'
    ORA-06550: 第 3 行, 第 6 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 6 行, 第 9 列:
    PLS-00201: 必须说明标识符 'M_TYPE'
    ORA-06550: 第 6 行, 第 6 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 10 行, 第 60 列:
    PLS-00201: 必须说明标识符 'M_AREA_CODE'
    ORA-06550: 第 9 行, 第 3 列:
    PL/SQL: SQL Statement ignored
    ORA-06550: 第 13 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_ZCLWZCS'
    ORA-06550: 第 13 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 14 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_ZWZKFS'
    ORA-06550: 第 14 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 15 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_ZFKJES'
    ORA-06550: 第 15 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 17 行, 第 3 列:
    PLS-00201: 必须说明标识符 'M_MSG'
    ORA-06550: 第 17 行, 第 3 列:
    PL/SQL: Statement ignored
    ORA-06550: 第 19 行, 第 59 列:
      

  12.   

    程序头错了呀,少了procedureCREATE OR REPLACE procedure WP_GRTJ_JWT ...
      

  13.   

    还有,这里面的必须都为";"不能用","
    变量必须以";"结尾。你自己改吧
    IS
      V_ZCLWZCS                  NUMBER(10,0),   
      V_BCLWZCS                  NUMBER(10,0),   
      V_WCLWZCS                  NUMBER(10,0),   
      V_ZWZKFS                   NUMBER(10,0),   
      V_BWZKFS                   NUMBER(10,0),   
      V_WWZKFS                   NUMBER(10,0),   
      V_ZFKJES                   NUMBER(10,0),   
      V_ZDKZJS                   NUMBER(5,0),  
      V_ZZKCS                    NUMBER(5,0),   
      V_ZZLCS                    NUMBER(5,0),   
      V_ZSJCS                    NUMBER(5,0),   
    TMP_V_TIME      VARCHAR2(20);  BEGIN