Sql ORACLE-程序中出现错误PLS-00103

Sql ORACLE-程序中出现错误PLS-00103,sql,database,oracle,stored-procedures,plsql,Sql,Database,Oracle,Stored Procedures,Plsql,为了练习PL/SQL,我按照ORACLE文档编写了这个简单的过程: create procedure BADGE_PROCEDURE (badges NUMBER) AS loops NUMBER; BEGIN loops := badges; loops := loops - 1; BEGIN LOOP insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', '

为了练习PL/SQL,我按照ORACLE文档编写了这个简单的过程:

create procedure BADGE_PROCEDURE (badges NUMBER) AS  
  loops NUMBER;  
BEGIN  
  loops := badges;  
  loops := loops - 1;  
  BEGIN LOOP  
    insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', '01-JAN-01');       
    loops := loops - 1;  
    EXIT WHEN loops < 0;  
  END LOOP;  
END;  
/
最后,这是我的顺序:

CREATE SEQUENCE BADGE_ID_SEQUENCE   
start with 1      
increment by 1    
nocache   
nocycle;   
但是,该过程编译时出现以下错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
11/5     PLS-00103: Encountered the symbol "end-of-file" when expecting
        one of the following:
        ( begin case declare end exception exit for goto if loop mod
        null pragma raise return select update while with
        <an identifier> <a double-quoted delimited-identifier>
        <a bind variable> << continue close current delete fetch lock
        insert open rollback savepoint set sql execute commit forall
        merge pipe purge

我做错了什么?

您的循环语法错误

照办

             LOOP  
                     insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', '01-JAN-01');       
                     loops := loops - 1;  
                     EXIT WHEN loops < 0;  
             END LOOP;  

这是一个来自oracle文档的示例。

您的循环语法错误

照办

             LOOP  
                     insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', '01-JAN-01');       
                     loops := loops - 1;  
                     EXIT WHEN loops < 0;  
             END LOOP;  
这是一个来自oracle文档的循环。

是循环。。。端环;没有开始

这个循环是。。。端环;没有开始


如果我没记错的话,begin循环应该是loop no begin。你说得对!我的错误还有,如果你要在日期列/变量中添加日期,请,请,请先将其转换为日期。目前,您正在尝试插入一个字符串,这将强制Oracle为您的会话使用默认的nls_date_格式参数。这可能与其他会话不同,并且您的代码可能会出错。最好是明确的,或者使用日期“2001-01-01”的日期文字格式,或者使用to_date,例如:to_date“01/01/2001”,“dd/mm/yyyy”。请注意,年份有四位数字,而不是两位-为什么要让db猜测何时可以提前提供准确的信息?好的,谢谢你的建议,我会记住它的开始循环应该是简单的循环不开始,如果我没记错的话..你是对的!我的错误还有,如果你要在日期列/变量中添加日期,请,请,请先将其转换为日期。目前,您正在尝试插入一个字符串,这将强制Oracle为您的会话使用默认的nls_date_格式参数。这可能与其他会话不同,并且您的代码可能会出错。最好是明确的,或者使用日期“2001-01-01”的日期文字格式,或者使用to_date,例如:to_date“01/01/2001”,“dd/mm/yyyy”。请注意,年份有四位数,而不是两位数-为什么要让数据库猜测你何时可以提前提供准确的信息?好的,谢谢你的建议,我会记住它谢谢你,这就是我一直在寻找的@Boneist固定使用日期文字-TBH我甚至没有查看插入的内容,但由于我通常在插入日期时接其他人,所以我应该查看。@MT0*{:-不用担心;发生在我们最好的人身上!谢谢你,这就是我要找的!@Boneist固定使用日期文字-TBH我甚至没有看插入的内容,但因为我通常在插入日期时接其他人,所以我应该看看。@MT0*{:-不用担心;发生在我们最好的人身上!
create procedure BADGE_PROCEDURE (badges NUMBER) AS  
  loops NUMBER;  
BEGIN  
  loops := badges;  
  loops := loops - 1;  
  LOOP  
    insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', DATE '2001-01-01');       
    loops := loops - 1;  
    EXIT WHEN loops < 0;  
  END LOOP;  
END;  
/
create procedure BADGE_PROCEDURE (badges NUMBER) AS  
BEGIN  
  FOR loops IN 1 .. badges LOOP  
    insert into BADGE values (BADGE_ID_SEQUENCE.nextval, 'prova', 'prova', DATE '2001-01-01');       
  END LOOP;  
END;  
/