Reputation: 23
I wrote this simple procedure following ORACLE Documentation in order to practice with PL/SQL:
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;
/
This is my BADGE table:
CREATE TABLE BADGE
(badge_id NUMBER PRIMARY KEY,
name VARCHAR(20),
surname VARCHAR(20) NOT NULL,
birthday DATE);
Finally this is my sequence:
CREATE SEQUENCE BADGE_ID_SEQUENCE
start with 1
increment by 1
nocache
nocycle;
However, the procedure compiles with the following error:
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
What am I doing wrong?
Upvotes: 1
Views: 2209
Reputation: 168588
The syntax for a loop is LOOP ... END LOOP;
without the BEGIN
.
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;
/
However, an even simpler version would be:
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;
/
Upvotes: 3