Sql ORACLE-程序中出现错误PLS-00103
为了练习PL/SQL,我按照ORACLE文档编写了这个简单的过程: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', '
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;
/