CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)        
   v_Str VARCHAR2(100);
     as    
     CURSOR C_users(v_minutes number) is
     SELECT s.username,s.status, s.machine, 'alter system kill session '
     ||''''||s.sid||','||s.serial# ||'''' operates
     FROM v$session s, v$process p
     WHERE TYPE = 'USER'
     AND p.addr = s.paddr
     AND status != 'KILLED'     
     AND last_call_et > v_minutes*60
     ORDER BY last_call_et desc;
    BEGIN
      FOR T_users IN C_users(an_minutes) LOOP
           v_Str := T_USERS.OPERATES;
           EXECUTE IMMEDIATE v_Str;
      END LOOP;
    END;
    /错误信息如下:
PROCEDURE WEBUSER.P_MONITOR 编译错误错误:PLS-00103: 出现符号 "V_STR"在需要下列之一时:
       ;iswithauthid
          deterministicparallel_enableas
       符号 "is" 被替换为 "V_STR" 后继续。
行:2
文本:v_Str VARCHAR2(100);错误:PLS-00103: 出现符号 "AS"在需要下列之一时:
       beginfunctionpackagepragma
          proceduresubtypetypeuse<an identifier>
          <a double-quoted delimited-identifier>cursorformcurrent
行:3
文本:AS

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)        
       v_Str VARCHAR2(100); ---这是什么东东?哪里来的语法
         as  翻oracle文档sql referencehttp://tahiti.oracle.com
      

  2.   

    try:CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)    
    as    
       v_Str VARCHAR2(100);         
         CURSOR C_users(v_minutes number) is
         SELECT s.username,s.status, s.machine, 'alter system kill session '
         ||''''||s.sid||','||s.serial# ||'''' operates
         FROM v$session s, v$process p
         WHERE TYPE = 'USER'
         AND p.addr = s.paddr
         AND status != 'KILLED'     
         AND last_call_et > v_minutes*60
         ORDER BY last_call_et desc;
        BEGIN
          FOR T_users IN C_users(an_minutes) LOOP
               v_Str := T_USERS.OPERATES;
               EXECUTE IMMEDIATE v_Str;
          END LOOP;
        END;
        /
      

  3.   

    语法问题:Create or Replace Procedure A (参数定义...) AS
       变量/常量定义...
    Begin
       内容描述...
    End;
      

  4.   

    应该这样写:
    CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)        
       
         as    
          v_Str VARCHAR2(100);
        BEGIN
         CURSOR C_users(v_minutes number) is
         SELECT s.username,s.status, s.machine, 'alter system kill session '
         ||''''||s.sid||','||s.serial# ||'''' operates
         FROM v$session s, v$process p
         WHERE TYPE = 'USER'
         AND p.addr = s.paddr
         AND status != 'KILLED'     
         AND last_call_et > v_minutes*60
         ORDER BY last_call_et desc;
       
          FOR T_users IN C_users(an_minutes) LOOP
               v_Str := T_USERS.OPERATES;
               EXECUTE IMMEDIATE v_Str;
          END LOOP;
        END;
      

  5.   

    CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)        
       v_Str VARCHAR2(100);
         as    
         CURSOR C_users(v_minutes number) is
    as有问题,as怎么在这个位置CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)        
         as    
       v_Str VARCHAR2(100);
         CURSOR C_users(v_minutes number) is
      

  6.   

    CREATE OR REPLACE PROCEDURE P_MONITOR(AN_MINUTES NUMBER DEFAULT 60)        
       
         as    
          v_Str VARCHAR2(100);
        
         CURSOR C_users(v_minutes number) is
         SELECT s.username,s.status, s.machine, 'alter system kill session '
         ||''''||s.sid||','||s.serial# ||'''' operates
         FROM v$session s, v$process p
         WHERE TYPE = 'USER'
         AND p.addr = s.paddr
         AND status != 'KILLED'     
         AND last_call_et > v_minutes*60
         ORDER BY last_call_et desc;
       BEGIN
          FOR T_users IN C_users(an_minutes) LOOP
               v_Str := T_USERS.OPERATES;
               EXECUTE IMMEDIATE v_Str;
          END LOOP;
        END;